1 votos

Ejecutable de reinicio automático después de que la aplicación falla [Windows]

Creación de una aplicación independiente para un kiosco que debe estar en funcionamiento 24 7.

En el caso raro, incluso la aplicación falla, necesito alguna forma de hacer que se reinicie automáticamente. Estoy ejecutando Windows 10 en un Nuc.

¿Puede algún experto de Windows sugerir la mejor manera de lograr esto?

2voto

Worthwelle Puntos 73

Una solución es utilizar un archivo de proceso por lotes con un infinito for bucle de reinicio automático de la aplicación si ésta se cierra. Hay dos posibilidades, dependiendo de cómo está diseñada la aplicación.

Si la aplicación se inicia y se ejecuta en el mismo proceso, se puede usar un simple archivo por lotes:

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

Esto va infinitamente. Cualquier momento application.exe está cerrada o se bloquea, el archivo por lotes se reinicie.

Esto no funciona si application.exe lanzamientos subapp.exe y, a continuación, application.exe cierra. En este caso, se necesitaría algo más 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

Si su aplicación puede tener varios procesos, entonces usted probablemente puede usar algo como FINDSTR /i "subapp.exe application.exe" en lugar de FIND /i "subapp.exe", pero esto no iba a funcionar para procesos con espacios en su nombre FINDSTR utiliza el espacio como un deliminator.

Con el fin de detener estos archivos por lotes una vez que has iniciado, dejar la aplicación abierta y el interruptor a la línea de comandos. A continuación, utilice Ctrl + C y reconoce que desee finalizar la secuencia de comandos. Una vez que el guión está terminado, cierre la aplicación.

Leer más:

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X