2011-07-29 82 views
1

我們有一個使用Visual Studio 2010開發的基於.NET的Windows應用程序。此應用程序是使用.NET Framework 2.0的目標框架構建的。我們以.NET 3.5 SP1作爲工作平臺(先決條件)發佈應用程序。總的來說,這個應用程序對我們大多數的客戶來說運行得非常好。但其中一個目前遇到了問題。應用程序會不時遇到致命錯誤(間歇性),並且被迫關閉而不會拋出除「應用程序遇到問題並需要關閉之外的任何錯誤消息」,對於給您帶來的不便,我們深表歉意。「我們可以從Windows事件查看器獲得唯一的信息。錯誤的詳細信息如下:錯誤clr20r3 .NET Windows應用程序Visual Studio 2010

來源:.NET運行庫2.0錯誤
的EventType:clr20r3,
P1:APP.EXE
P2:6.0.0.0
P3:4dee1ecd
P4:system.windows者,恕不
P5:2.0.0.0
P6:4889dee7
P7:16cf
P8:159
P9:system.componentmodel.win32
P10:NIL

當應用程序崩潰時,用戶正在執行不同的操作。我們在Windows XP Professional上安裝了一個虛擬機,這是我們客戶使用的操作系統。在測試環境中,一切都運行良好。我們永遠無法複製這個問題。

任何機構都有任何想法或想法?

任何意見,非常感謝。

+0

您需要改善未處理的異常處理。編寫AppDomain.CurrentDomain.UnhandledException事件的事件處理程序,並顯示或記錄e.ExceptionObject.ToString()的值。 –

+0

[解密.NET clr20r3異常參數P1..P10]的可能重複(http://stackoverflow.com/questions/4052770/deciphering-the-net-clr20r3-exception-parameters-p1-p10) –

回答

2

當Windows窗體應用程序遇到消息泵的未處理的錯誤 - 您應該檢查以確保在事件日誌中出現此錯誤(或至少與此類似,這是前一段時間)您Main方法和所有後臺線程都有的try-catch塊,(或者你處理UnhandledException事件):

[STAThread] 
static void Main() 
{ 
    try 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    catch (Exception ex) 
    { 
     // Log me 
    } 
} 

注意,例如,在發佈上述catch塊通常不會被使用,因爲這些方法不要」 t通常會拋出異常,但是如果您更改了UnhandledExceptionMode或做了任何可能會在您的消息泵之外拋出異常的情況,那麼這個m讓你看到你的行爲。

2

不依靠窗口日誌。而是糾正你自己的錯誤;你能做的就是處理程序拋出任何異常,記錄它,然後重新啓動應用程序:
因此,在你的主:

AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException; 

//Add these too if you are in windows forms application 
Application.ThreadException += OnApplication_ThreadException; 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

那麼,如果拋出異常只是記錄它,你也可以重新啓動應用程序

private static void OnCurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
#if DEBUG 
    System.Diagnostics.Debugger.Break();//we will break here if we are in debug mode. 
#endif//DEBUG 

    LogException(e);//maybe send email to you also. 
    RestartTheApplication();  
} 
相關問題