我正在为一个必须全天候运行的信息亭创建一个独立的应用程序。
在极少数情况下,应用程序崩溃时,我需要某种方法让它自动重启。我在 Nuc 上运行 Windows 10。
有没有 Windows 专家可以建议实现此目的的最佳方法?
答案1
一种解决方案是使用带有无限循环的批处理文件,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
使用空格作为分隔符。
为了在启动这些批处理文件后停止它们,请保持应用程序打开并切换到命令提示符。然后使用Ctrl+C并确认您要结束脚本。脚本终止后,关闭应用程序。
进一步阅读:
- 暂停- 添加延迟,也提到
PING
- 寻找- 搜索文本
- 查找字符串- 搜索文本(比 更复杂
FIND
) - 任务列表- 显示所有正在运行的应用程序和服务
- 转义符、分隔符和引号-
^
for 循环中的字符是转义字符