我有一个服务器应用程序,我希望它在计算机运行时运行,通常情况就是这样,但有时我会发现它会自动关闭。
是否有一个我可以运行的脚本或脚本来监视应用程序并在其关闭时重新启动它?
答案1
这并不总是有效(这取决于程序如何加载自身),但通常您可以创建如下批处理文件:
@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
goto Start
我使用记事本作为示例。
线条
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
只是一个延迟(10 秒),让用户有机会在重新启动之前中止该过程。
线路
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
不是必需的,但每次程序关闭时都会记录到文件中,因此它可能对诊断问题有用。ErrorLevel 可能不会告诉你太多信息,但如果程序正常关闭,则应该返回 0,否则返回非零消息
注意,您提到,如果程序已在运行,则不会执行任何操作。这通常意味着应用程序启动后,检测到另一个副本已在运行并立即关闭。如果是这种情况,并且您的程序在您启动此批处理文件之前正在运行,则批处理将循环并尝试每十秒启动一次您的程序。
答案2
根据您上面的回答,我建议您将该命令放入批处理文件中,然后将该批处理文件设置为每分钟作为计划任务运行。这样做几乎没有任何开销,而且可以确保您的进程启动,无论您是否在场甚至意识到它停止了。
答案3
我猜正确的这个问题的答案取决于为什么你想这样做。你是想解决意外关机问题吗?防止机器用户随意“恶意”关机(例如员工关闭监控软件)?防止严重且熟练的恶意攻击?你是想自己编写恶意软件吗(在这种情况下请滚开 ;-))?
此外,正如其他评论者提到的那样,如果你编写了 Windows 服务(例如),情况会有所不同
就我个人而言,我可能会先编写第二个应用程序,然后以相同的方式启动它。两个都应用程序扫描彼此定期并重新启动-确保您提供一种简单的方法来合法关闭应用程序!
话虽如此,鉴于您的评论“有时我会发现它自己关闭了”,我实际上会首先尝试找出它关闭的原因......
答案4
我使用这个来自动重新启动停止的进程。
cd "~file directory~"
:loop
Start ProgramName.exe | set /P "="
goto loop