我的應用程序需要掃描經常導致崩潰的第三方文件。 爲了克服這個問題,它使用一個單獨的進程來掃描這些文件,並且每當這個進程崩潰時我的應用程序就會實例化另一個文件。防止Windows中的崩潰消息
我的問題是,每次大跌後獲得Windows崩潰的消息: 「AuxScanner已停止工作......」
我怎樣才能防止這種消息,並悄悄地崩潰了?
我使用命名管道進行進程間通信。
感謝
我的應用程序需要掃描經常導致崩潰的第三方文件。 爲了克服這個問題,它使用一個單獨的進程來掃描這些文件,並且每當這個進程崩潰時我的應用程序就會實例化另一個文件。防止Windows中的崩潰消息
我的問題是,每次大跌後獲得Windows崩潰的消息: 「AuxScanner已停止工作......」
我怎樣才能防止這種消息,並悄悄地崩潰了?
我使用命名管道進行進程間通信。
感謝
請參閱http://blogs.msdn.com/b/oldnewthing/archive/2004/07/27/198410.aspx:您可以禁用程序崩潰對話框(儘管您需要從子進程內部執行此操作)。
我讀它的樣子,你想在你的子過程是這樣的:
#include <windows.h>
//...
SetErrorMode(SetErrorMode(0) | SEM_NOGPFAULTERRORBOX);
//or if you only care about Vista or newer:
//SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX);
的方式有趣的問題 - 這可能是有趣的,堅持到開發過程中各種軟件;當你積極開發的代碼崩潰(並非意外),然後一切等待,你的UI改變焦點,它提供(毫無意義地)將崩潰轉儲發送到微軟,這是非常煩人的...
如果你得到了「......竟停止工作」的消息,這意味着你沒有處理異常。確保能夠或可能導致崩潰的代碼段被封裝在try/catch塊中,並優雅地處理異常。
處理你的.NET (CLR)例外。
處理您的C++異常。
處理您的SEH exceptions。
見http://blogs.msdn.com/b/kirush/archive/2008/04/24/global-crash-handler-for-c-application.aspx
最後一招:SetErrorMode(SEM_NOGPFAULTERRORBOX)
根據文檔'SetErrorMode(SEM_NOGPFAULTERRORBOX)'覆蓋以前的標誌 - 你想保持其他標誌不變,只需添加該標誌。 –
我喜歡這個答案。它沒有回答原來的問題,而是因爲Shlomi Tsur錯過了這個觀點,即無論處理文件的內容如何,沒有理由讓這個進程崩潰。 – DataGraham