如何在Windows上自动捕获并重新启动崩溃的进程?

时间:2014-11-04 03:38:25

标签: windows winapi

这可能很愚蠢。当我的进程崩溃时, WerFault.exe 已经启动,我只有在关闭此窗口或终止其任务后才能重新获得控制权。

我正在寻找一种简单的方法,不让崩溃的程序显示这个窗口,或者让我抓住这个崩溃的任何想法。

顺便说一句,SEH没用。我不确定为什么。当我使用SEH时,崩溃仍然存在。

谢谢!

现在我只想弄清楚如何避开这个 WerFault.exe 窗口,有时还会 csrss.exe 窗口并重新获得控制权。

2 个答案:

答案 0 :(得分:2)

使用Application Recovery and Restart API重启Windows错误报告(WER)并在崩溃时恢复应用。使用RegisterApplicationRestart()注册您要重新启动的意图。使用RegisterApplicationRecoveryCallback()注册保存和恢复状态数据的意图。

答案 1 :(得分:0)

我没有尝试过这个,但是这个api:WerAddExcludedApplication应该禁用错误导出:http://msdn.microsoft.com/en-us/library/bb513617%28v=VS.85%29.aspx

至于重新启动应用程序,您可以创建另一个后台进程,该进程将启动主进程并监视其行为方式。如果它崩溃然后重新启动它。

[编辑]

不幸的是,这个api可能无效,正如评论中所建议的那样 - 要删除此对话框,您必须FindWindow() and SendMessage(... WM_CLOSE...).