Programm selbst neu starten



  • hallo erstmal,

    also mein problem:

    ich möchte das sich mein programm alle 2 stunden neu startet. (möchte dabei nicht extra eine 2te exe schreiben) da ich das programm öfters aufm pc laufen haben muss und wenn ichs dann 2mal starte habe ich gleich 4 prozesse laufen.

    und falls mein programm irgend einen absturz hat soll es sich auch neu starten
    wüsste jmd eine lösung dafür ?

    danke schonmal



  • RestartMe schrieb:

    (möchte dabei nicht extra eine 2te exe schreiben)

    Grundsätzliches:
    Wenn ein Programm nach einem Absturz automatisch neugestartet werden soll, dann muß zwangsläufig eine zweite Applikation (oder ein Windows-Service) parallel laufen, welche die eigentliche Applikation auf tot/lebendig hin überprüft.
    Eine andere Möglichkeit sehe ich keine.

    Daher mein Vorschlag für einen möglichen Ansatz:
    Du startest ein (selbstgeschriebenes) "Mini"-Programm.
    Dieses startet sofort die eigentliche Applikation.
    Nach 2 Stunden beendet das Mini-Programm die eigentliche Applikation, und startet sie erneut.
    Zusätzlich prüft das Mini-Programm z.B. alle 20 Sekunden, ob die Applikation (bzw. der Prozess) noch aktiv ist.
    Ggf. zusätzlich Kommunikation mit der Applikation auswerten, denn die Applikation kann sich in einer Endlosschleife "verirren", aber der Prozeß selbst lebt weiter...

    Martin

    P.S.: Den Prozeß immer zunächst mit einer WM_CLOSE-Nachricht beenden, und wenn dies nicht erfolgreich ist, dann bis hin zu mit TerminateProcess() die brutale Methode verwenden. Siehe auch die Erklärung von WebFritzi in http://www.c-plusplus.net/forum/viewtopic-var-t-is-39369-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html

    P.P.S.: Anstelle eines selbstgeschriebenes Mini-Programms könntest Du das Problem evtl. auch mit z.B. AutoIt (eine BASIC-ähnliche Scriptsprache, http://www.autoitscript.com/autoit3/ ) lösen? Siehe die AutoIt-Befehle Run, ProcessExists und ProcessClose.



  • Die große Frage ist natürlich: Muss ein Neustart des Programms wirklich sein, oder kann man das auch innerhalb des Programms irgendwie anders lösen (z.B. Schleife mit Timer).


Anmelden zum Antworten