Одним из решений является использование командного файла с бесконечным циклом 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 и подтвердите, что хотите завершить скрипт. После завершения сценария закройте приложение.
Дальнейшее чтение: