Une solution consiste à utiliser un fichier de commandes avec une for
boucle infinie pour redémarrer automatiquement l'application si elle se ferme. Il y a deux possibilités ici, en fonction de la conception de l'application.
Si l'application est lancée et s'exécute dans le même processus, vous pouvez utiliser un fichier de commandes très simple:
@echo off
:Start
C:\path\to\application.exe
:: Wait 30 seconds before restarting.
TIMEOUT /T 30
GOTO:Start
Cela fonctionnera indéfiniment. Chaque fois que application.exe
se ferme ou se bloque, le fichier de commandes le redémarre.
Cela ne fonctionnera pas si se application.exe
lance subapp.exe
puis se application.exe
ferme. Dans ce cas, vous auriez besoin de quelque chose de plus compliqué.
@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 votre application peut avoir plusieurs processus, vous pouvez probablement utiliser quelque chose comme à la FINDSTR /i "subapp.exe application.exe"
place de FIND /i "subapp.exe"
, mais cela ne fonctionnerait pas pour les processus avec des espaces dans leur nom car ils FINDSTR
utilisent l'espace comme un suppresseur.
Pour arrêter ces fichiers de commandes une fois qu’ils ont été démarrés, laissez l’application ouverte et passez à l’invite de commande. Ensuite, utilisez Ctrl+ Cet confirmez que vous souhaitez mettre fin au script. Une fois le script terminé, fermez l'application.
Lectures complémentaires: