Ausführbare Datei nach Programmabsturz automatisch starten [Windows]

534
Bachalo

Erstellen einer eigenständigen Anwendung für einen Kiosk, der betriebsbereit sein muss 24 7.

In den seltenen Fällen sogar stürzt die Anwendung ab, ich brauche einen Weg, um es automatisch neu zu starten. Ich lasse Windows 10 auf einem Nuc laufen.

Können irgendwelche Windows-Experten den besten Weg vorschlagen, um dies zu erreichen?

1
Eine andere Option könnte darin bestehen, einen Dienst der Anwendung zu erstellen. Ein Dienst kann so eingestellt werden, dass er sich 3 Mal neu startet. Dadurch wird ein Eingabeaufforderungsfenster entfernt, das von jedermann geschlossen werden kann. Dies ist jedoch schwieriger einzurichten ... LPChip vor 5 Jahren 0

1 Antwort auf die Frage

2
Worthwelle

Eine Lösung ist die Verwendung einer Batchdatei mit einer forEndlosschleife, um die Anwendung automatisch neu zu starten, wenn sie geschlossen wird. Hier gibt es zwei Möglichkeiten, je nachdem, wie die Anwendung gestaltet ist.

Wenn die Anwendung gestartet wird und in demselben Prozess ausgeführt wird, können Sie eine sehr einfache Batchdatei verwenden:

@echo off :Start C:\path\to\application.exe :: Wait 30 seconds before restarting. TIMEOUT /T 30 GOTO:Start 

Das wird unendlich laufen. Jedes Mal, wenn application.exegeschlossen wird oder abstürzt, wird die Batchdatei neu gestartet.

Dies funktioniert nicht, wenn application.exegestartet subapp.exeund dann application.exegeschlossen wird. In diesem Fall benötigen Sie etwas Komplizierteres.

@ECHO off SET _PollingInterval=30  :BatchStart C:\path\to\application.exe  :Start :: Uncomment the following line on versions of Windows prior to Windows 7 and comment out the TIMEOUT line. The PING solution will not be 100% accurate with _PolingInterval. :: PING 127.0.0.1 -n %_PollingInterval% >nul TIMEOUT /T %_PollingInterval%  SET PID= FOR /F "tokens=2 delims= " %%i IN ('TASKLIST ^| FIND /i "subapp.exe"') DO SET PID=%%i IF [%PID%]==[] ( ECHO Application was not running. Restarting script. GOTO BatchStart ) GOTO Start  GOTO:EOF 

Wenn Ihre Anwendung verschiedene Prozesse haben könnte, können Sie wahrscheinlich etwas ähnliches FINDSTR /i "subapp.exe application.exe"anstelle von verwenden FIND /i "subapp.exe". Dies würde jedoch nicht für Prozesse mit Leerzeichen in ihrem Namen funktionieren, da FINDSTRdas Leerzeichen als Deliminator verwendet wird.

Um diese Batch-Dateien nach dem Start zu stoppen, lassen Sie die Anwendung geöffnet und wechseln Sie zur Eingabeaufforderung. Verwenden Sie dann Ctrl+ Cund bestätigen Sie, dass Sie das Skript beenden möchten. Wenn das Skript beendet ist, schließen Sie die Anwendung.

Lesen Sie weiter:

Vielen Dank! Eine kurze Frage: Wie kann ich die einfachste (1.) Lösung verzögern, damit die Anwendung nicht sofort neu gestartet wird? Bachalo vor 5 Jahren 0
Sie können den Befehl [`TIMEOUT] (https://ss64.com/nt/timeout.html) verwenden. Ich habe es dem Beispiel in der Antwort hinzugefügt. Worthwelle vor 5 Jahren 0