2014-11-04 57 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

相關問題