Автоматический перезапуск исполняемого файла после сбоя приложения [Windows]

468
Bachalo

Создание отдельного приложения для киоска, который должен быть запущен и работать 24 7.

В редких случаях даже при сбое приложения мне нужен какой-то способ сделать автоматический перезапуск. Я использую Windows 10 на Nuc.

Могут ли эксперты по Windows предложить лучший способ добиться этого?

1
Другим вариантом может быть создание службы приложения. Служба может быть настроена на перезагрузку 3 раза. Это исключит отображение окна командной строки, которое может быть закрыто любым пользователем. Это сложнее настроить, хотя ... LPChip 6 лет назад 0

1 ответ на вопрос

2
Worthwelle

Одним из решений является использование пакетного файла с бесконечным forциклом для автоматического перезапуска приложения, если оно закрывается. Здесь есть две возможности, в зависимости от того, как разработано приложение.

Если приложение запускается и выполняется в том же процессе, вы можете использовать очень простой командный файл:

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

Это будет работать бесконечно. Каждый раз, когда application.exeзакрывается или падает, пакетный файл перезапустит его.

Это не будет работать, если application.exeзапускается, subapp.exeа затем application.exeзакрывается. В этом случае вам нужно что-то более сложное.

@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 

Если ваше приложение может иметь различные процессы, то вы, вероятно, можете использовать что-то вроде FINDSTR /i "subapp.exe application.exe"вместо FIND /i "subapp.exe", но это не будет работать для процессов с пробелами в их имени, так как FINDSTRиспользует пространство в качестве разделителя.

Чтобы остановить эти командные файлы после их запуска, оставьте приложение открытым и переключитесь в командную строку. Затем используйте Ctrl+ Cи подтвердите, что вы хотите завершить скрипт. После завершения сценария закройте приложение.

Дальнейшее чтение:

Спасибо! Один быстрый вопрос, как бы я добавил задержку к простейшему (1-му) решению, чтобы приложение не перезагружалось сразу? Bachalo 6 лет назад 0
Вы можете использовать команду [`TIMEOUT`] (https://ss64.com/nt/timeout.html). Я добавил это к примеру в ответе. Worthwelle 6 лет назад 0

Похожие вопросы