Anwendung auf knopfdruck restarten
-
Hallo zusammen,
gibt es einen Befehl, mit dem ich auf Knopfdruck meine Anwendung beenden kann und diese dann anschliessend wieder automatisch startet ?
Gruss
chloe
-
Solange Du keinen Mutex o.ä. einsetzt, reicht es doch die Anwendung per ShellExecute neu zu starten und dann erst die laufende Instanz zu beenden.
-
Hallo
sollte grundsätzlich mit einem
ShellExecute(<Name des eigenes Programms>) ; Application->Terminate();gehen
Allerdings dürfte eine saubere interne Reinitialisierung besser sein.
bis bald
akari
-
Vielen Dank hat funktioniert!
-
hier mal ein kleines beispiel falls du nen mutex hast (konsolenexperte und konsolen-anwendung deaktivieren damit man die WinMain bekommt):
Programmtitel ist der Name deines Programms. Das Programm wartet nun bis die Anwendung mit dem Titel Programmtitel nicht mehr gefunden wird und startet sie dann erneut.
#include <windows.h> WINAPI WinMain(HINSTANCE handle, HINSTANCE, LPSTR CmdLine, int) { // warten bis Anwendung nicht mehr gefunden wird while (FindWindow(NULL, "Programmtitel")) Sleep(250); LPTSTR filepath = new TCHAR[MAX_PATH]; // aktuelles verzeichnis holen if (GetModuleFileName(handle, filepath, MAX_PATH)) { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char file[_MAX_FNAME]; char ext[_MAX_EXT]; // pfad extrahieren _splitpath(filepath, drive, dir, file, ext); _makepath(filepath, drive, dir, "", ""); if (((int) ShellExecute(NULL, "open", strcat(filepath, CmdLine), NULL, NULL, SW_SHOWNORMAL)) <= 32) MessageBox((HWND) handle, "Fehler beim Neustarten der Anwendung...", "Fehler", MB_OK); } delete [] filepath; return 0; }das kompilieren und die exe in das Verzeichnis deiner anwendung legen.
in deinem eigentlichen Programm machst du dir ne kleine hilfs-funktion zum neustarten://--------------------------------------------------------------------------- // Startet die Anwendung neu //--------------------------------------------------------------------------- void AutoRestart() { // Hilfsprogramm starten // -> Pfad der Anwendung // -> Name der Exe der Anwendung ShellExecute(0, "open", (ExtractFilePath(Application->ExeName) + "restart.exe").c_str(), ExtractFileName(Application->ExeName).c_str(), 0, SW_SHOWNORMAL); // Anwendung abschießen Application->ProcessMessages(); Application->Terminate(); Application->ProcessMessages(); }ist schon ein paar jahre alt der code und schon lange nicht mehr gepflegt wurden, aber ich hoffe es funktioniert noch.
-
akari schrieb:
Hallo
sollte grundsätzlich mit einem
ShellExecute(<Name des eigenes Programms>) ; Application->Terminate();gehen
Allerdings dürfte eine saubere interne Reinitialisierung besser sein.
bis bald
akarilaut kompiler sind das zu wenig parameter!
-
Hallo
ich habe extra grundsätzlich dazu geschrieben.
Wenn du die Forumssucher benutzt hättest, hättest du zum Beispiel diesen Thread gefunden, der dich über die vollständige Syntax der Funktion
aufklärt.bis bald
akari