2011-07-29 51 views
1

Visual Studio 2010で開発された.NETベースのWindowsアプリケーションがあります。このアプリケーションは、.NET Framework 2.0のターゲットフレームワークで構築されています。我々は、作業プラットフォーム(前提条件)として.NET 3.5 SP1でアプリケーションを出荷しています。一般に、このアプリケーションは、ほとんどのお客様に非常によく動作しています。しかし、そのうちの1人は現時点で問題を抱えています。アプリケーションは時折致命的なエラーに遭遇し(断続的に)、「アプリケーションに問題が発生して終了する必要があります」というエラーメッセージをスローせずにシャットダウンするよう強制されます。ご迷惑をおかけして申し訳ありません。取得できる唯一の情報は、Windowsのイベントビューアです。エラーclr20r3 .NET WindowsアプリケーションVisual Studio 2010

ソース:.NETランタイム2.0エラー
のEventType:clr20r3、
P1:APP.EXE
P2:6.0.0.0
P3:次のようにエラーの詳細は
P4を4dee1ecd:system.windows .forms
P5:2.0.0.0
P6:4889dee7
P7:16cf
P8:159
P9:system.componentmodel.win32
P10:NIL

アプリケーションがクラッシュすると、ユーザーは異なる操作を実行していました。 Windows XP Professionalを搭載した仮想マシンをセットアップします。これは、お客様が使用しているOSです。テスト環境ではすべてが完全に正常に実行されていました。この問題を再現することはできません。

どのような体にもアイデアや考えがありますか?

すべてのコメントをいただきありがとうございます。

+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イベントを処理)があること:

例では、通常、これらのメソッドドン」として使用されない上記 catchブロックを掲載。なお
[STAThread] 
static void Main() 
{ 
    try 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    catch (Exception ex) 
    { 
     // Log me 
    } 
} 

通常は例外をスローしますが、UnhandledExceptionModeを変更した場合や、メッセージポンプの外で例外をスローする可能性がある場合は、このmあなたが見ている行動をあなたに与えてください。

2

Windowsログに依存しないでください。代わりにバグあなた自身の右。あなたが行うことができ、アプリケーションによってスローされた例外を処理してログインし、その後、アプリケーションの再起動することです:あなたのメインで行って
を:

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();  
} 
関連する問題