Windows下程序崩溃如何自动重启?

问题描述 投票:0回答:8

如果我的程序在 Windows 2003 服务器上崩溃了,如何才能自动启动它?有时我的程序会崩溃,有没有办法在窗口或设置中进行设置?

windows windows-server-2003
8个回答
21
投票

在 Windows 上创建进程主管/监护进程有多种方法。 首先,是利用 Windows 命令行功能。创建bat文件:

@echo off
:start
start /w "your app to watch.exe"
goto start

start /w
将等待进程退出。当进程崩溃并退出时,bat 脚本将重新启动它。

另一种选择是使用免费的

supervisor
工具 https://github.com/chebum/Supervisor。它允许重新启动崩溃的应用程序,此外它还允许同时监视两个或多个应用程序,并且当主管窗口关闭时,它会自动关闭这些应用程序。


17
投票

通常的方法是运行所谓的“监护人”进程。这是一个单独的进程,通常是一个服务,用于监视主进程的状态。当守护者检测到主服务已死亡时,它会重新生成它。 据我所知,没有内置的 Windows 功能可以为您执行此操作。


8
投票

无论如何。我刚刚想起了我 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,可能是因为它循环了数十亿次“由于缺乏权限而无法运行程序”之类的 :)


5
投票
RegisterApplicationRestart。

“如果您注册重启并且应用程序遇到 未处理的异常或没有响应,向用户提供 重新启动应用程序的机会;该应用程序不是 未经用户同意自动重启。 ”

对于无需用户干预的自动重启,还有
RestartOnCrash

。适用于所有 Windows 版本。


3
投票

经过一番谷歌搜索后,我发现了这个不错的

列表

。博主整理了大约8个工具来自动重启崩溃或关闭的应用程序。


1
投票

您是否需要主动与应用程序的 GUI 进行交互?一些

Service Wrappers

(旨在将任何应用程序作为 Windows 服务运行)将监视您的应用程序并在失败时重新启动它,但请务必调查 Session 0 Isolation 以确保它不会妨碍您。


1
投票
BDV SystemEvents

或任何其他应用程序。它允许您指定在其他应用程序关闭时将启动的应用程序。指定相同的应用程序作为条件和操作,您将获得预期的结果。


0
投票

https://www.win-logon.com/docs/ensuring-连续-操作/

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.