2013-06-26 41 views
2

是否有任何方法可以完全終止當前進程並跳過Windows錯誤報告?或者甚至以更友好的方式處理全局錯誤,以便異常不會傳遞到操作系統?在沒有Windows錯誤報告的情況下終止應用程序

我處理儘可能多的錯誤,我可以在本地,但也有一個全球性的錯誤處理程序,將發送給我一個錯誤的詳細信息的電子郵件。這是我自定義的錯誤報告。

我有一個WPF C#應用程序,我已經爲我的公司構建。它只被少數人使用。

我試圖找到一種方法來提出一個更友好的消息,說錯誤已被拋出,應用程序必須關閉,發送電子郵件,然後關閉應用程序。但不管我做什麼,應用程序仍然凍結並嘗試向Microsoft報告錯誤。

+0

請給我們看看代碼 – jomsk1e

+0

這是你做這件事的方式,當你在這裏提問時不要保守祕密。沒有太多的事情,爲AppDomain.CurrentDomain.UnhandledException編寫一個事件處理程序,並且不允許它返回。在報告錯誤之後調用Environment.Exit()。 –

+0

您的解決方案,@HansPassant。 Environment.Exit(0); – CaptainCrypto

回答

0

有時你可以,有時你不能。

首先,您必須檢查異常會導致您的應用程序從事件查看器崩潰並查看是否可以處理此類異常。 App.DispatcherUnhandledException和AppDomain.UnhandledException事件處理程序可以處理許多異常。

但是有些異常不能被用戶捕獲,例如ExecutionEngineException。在這些情況下,您無法防止崩潰並正常處理。

0

您必須在ApplicationAppDomain級別添加gloabl異常處理程序。

應用級別的處理程序:

Application.Current.DispatcherUnhandledException += OnDispatcherUnhandledException; 

void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs eventArgs) 
{ 
     // exception handling goes here 
} 

的AppDomain級別的處理程序:

AppDomain.CurrentDomain.UnhandledException += OnAppDomainUnhandledException; 

void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs eventArgs) 
{ 

} 

不過,也有少數例外類型(如StackOverflowException)無法處理。

相關問題