2014-11-04 243 views
3

这可能很愚蠢。当我的进程崩溃时,已经启动了一个WerFault.exe,并且只有在关闭此窗口或终止其任务后,我才能重新获得控制权。如何在Windows上自动捕获并重新启动崩溃的进程?

我正在寻找一种简单的方式,不让坠毁的程序显示此窗口或任何想法,以便我捕捉到这个崩溃。顺便说一下,SEH没有用。我不知道为什么。当我使用SEH时,崩溃仍然存在。

谢谢!

现在我只想搞清楚如何避免这种WerFault.exe窗口有时CSRSS.EXE窗口,并重新获得控制权。

+0

不确定这是否仍然准确,但http://support2.microsoft.com/kb/121434描述了如何分配默认调试器。 – 2014-11-04 03:43:37

+0

@HarryJohnston我的进程崩溃是正常的。它在静态库上运行多个测试。 – 2014-11-04 03:48:54

+0

您是否尝试过使用'SetUnhandledExceptionFilter'? – 2014-11-04 05:12:47

回答

0

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

至于重新启动的应用程序,你可以创建另一个后台进程将启动你的主要过程,并监视它的行为。如果它崩溃然后重新启动它。

[编辑]

遗憾的是这个API可能无法正常工作,如意见提出来了 - 删除此对话框中你将不得不FindWindow() and SendMessage(... WM_CLOSE...).

+0

您是否建议我应该创建另一个运行** FindWindow(...“WerFault.exe”...)**的线程? – 2014-11-04 03:59:16

+0

好吧我试过** WerAddExcludedApplication **,而不是一个'大'窗口,它创建了一个小窗口:)。这很可爱,但不是我想要的。 – 2014-11-04 04:03:16

+0

你可能比FindWindow做得更好; Raymond Chen最近撰写了一些关于UI自动化的文章,例如http://blogs.msdn.com/b/oldnewthing/archive/2014/02/17/10500645.aspx – 2014-11-04 05:47:39

2

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

+0

好找(+1),但不是确定这对于OP所需要的会更好,因为它会弹出一个“你想重启吗?”对话框时,应用程序崩溃,这就像“你想发送错误报告?”一样令人讨厌。另外,它要求应用程序运行至少60秒,这对测试程序来说可能很大。 – Damon 2014-11-05 11:44:26

+0

这似乎不是我想要的。我仍然需要手工关闭“OOPS I崩溃:(”窗口并重新获得控制权。 – 2014-11-06 09:19:32

相关问题