Uma solução é usar um arquivo em lote com um loop for
infinito para reiniciar automaticamente o aplicativo se ele for fechado. Existem duas possibilidades aqui, dependendo de como o aplicativo é projetado.
Se o aplicativo for iniciado e executado no mesmo processo, você poderá usar um arquivo em lote muito simples:
@echo off
:Start
C:\path\to\application.exe
:: Wait 30 seconds before restarting.
TIMEOUT /T 30
GOTO:Start
Isso será executado infinitamente. Sempre que application.exe
for fechado ou travar, o arquivo em lote será reiniciado.
Isso não funcionará se application.exe
ativar subapp.exe
e, em seguida, application.exe
fechar. Nesse caso, você precisaria de algo mais complicado.
@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
Se o seu aplicativo puder ter vários processos, provavelmente você poderá usar algo como FINDSTR /i "subapp.exe application.exe"
em vez de FIND /i "subapp.exe"
, mas isso não funcionaria para processos com espaços em seu nome, pois FINDSTR
usa o espaço como um deliminador .
Para interromper esses arquivos em lote depois de iniciados, deixe o aplicativo aberto e mude para o prompt de comando. Em seguida, use Ctrl + C e confirme que deseja finalizar o script. Quando o script for finalizado, feche o aplicativo.
Outras leituras:
-
Tempo limite - Adicionar um atraso, também menciona
PING
- Localizar - Pesquisar texto
-
FindStr - Pesquisar texto (mais complexo que
FIND
) - Lista de tarefas - exibe todos os aplicativos e serviços em execução
-
Caracteres de escape, Delimitadores e citações - O caractere
^
no loop for é um caractere de escape