одним из решений является использование пакетного файла с бесконечным 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
использует пространство как deliminator.
чтобы остановить эти пакетные файлы после их запуска, оставьте откройте приложение и переключитесь в командную строку. Тогда используйте Ctrl + C и подтвердите, что хотите завершить сценарий. После завершения работы скрипта закройте приложение.
читайте далее: