如果我的程序在 Windows 2003 服务器上崩溃了,如何才能自动启动它?有时我的程序会崩溃,有没有办法在窗口或设置中进行设置?
在 Windows 上创建进程主管/监护进程有多种方法。 首先,是利用 Windows 命令行功能。创建bat文件:
@echo off
:start
start /w "your app to watch.exe"
goto start
start /w
将等待进程退出。当进程崩溃并退出时,bat 脚本将重新启动它。
另一种选择是使用免费的
supervisor
工具 https://github.com/chebum/Supervisor。它允许重新启动崩溃的应用程序,此外它还允许同时监视两个或多个应用程序,并且当主管窗口关闭时,它会自动关闭这些应用程序。
通常的方法是运行所谓的“监护人”进程。这是一个单独的进程,通常是一个服务,用于监视主进程的状态。当守护者检测到主服务已死亡时,它会重新生成它。 据我所知,没有内置的 Windows 功能可以为您执行此操作。
无论如何。我刚刚想起了我 286 天里的一些事情,当时我经常使用 BAT 文件。如果您写入文件
yourprogram.exe
some other event
BAT 文件将运行您的程序,然后在后台暂停并等待,直到程序退出。之后它将运行“一些其他事件”。如果您想同时运行多个任务,这曾经有点烦人,但在这里它实际上很有用。使用它,可以让它运行一个循环,在程序退出时立即重新启动程序(并重新运行 bat 文件)。将此与https://superuser.com/questions/62525/run-a-completly-hidden-batch-file
结合起来,您将永远不会看到它发生。 最终的 BAT 文件(本例中为“restart.bat”)将类似于:
c:\[location]\yourprogram.exe
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"
就是这样。使用第 2 行启动程序(通过任务甚至只是启动文件夹启动),这应该可以解决您的问题:)
哦,如果你想停止循环,只需重命名bat文件或在两行前面加上“//”,保存并退出程序即可。
如果您运行的程序需要管理员权限,我找到的解决方案是使用 psexec (
http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx) 来运行程序和 bat提升的特权。在这种情况下,BAT 将如下所示:
c:\[location]\psexec -h c:\[location]\yourprogram.exe
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"
然后以管理员身份运行 bat,或使用提升的权限从任务计划程序运行第二行(不带 psexec 部分)。注意:以普通用户身份运行它并在 UAC 提示上单击“否”会导致 BSOD,可能是因为它循环了数十亿次“由于缺乏权限而无法运行程序”之类的 :)
您是否需要主动与应用程序的 GUI 进行交互?一些
Service Wrappers(旨在将任何应用程序作为 Windows 服务运行)将监视您的应用程序并在失败时重新启动它,但请务必调查 Session 0 Isolation 以确保它不会妨碍您。