Reinício automático do executável após a falha do aplicativo [Windows]

1

Criando um aplicativo independente para um quiosque que deve estar ativo e funcionando 24 7.

Nos casos raros, até mesmo o aplicativo trava, eu preciso de alguma forma para reiniciar automaticamente. Estou executando o Windows 10 em um Nuc.

Algum especialista do Windows pode sugerir a melhor maneira de conseguir isso?

    
por Bachalo 28.09.2018 / 19:22

1 resposta

2

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:

por 28.09.2018 / 19:42