1

C# の UI アプリで未処理の例外をすべてキャッチして、ログに記録し、メールで送信してアプリを再起動できるようにしたいと考えています。

どうすればこれを簡単に行うことができますか?私は試した:

try
{
 Application.EnableVisualStyles();
 Application.SetCompatibleTextRenderingDefault(false);
 Application.Run(new MainDlg());
}
catch (Exception e)
{
 Logger.Log(e);
 Logger.PostLog();
  System.Diagnostics.Process.Start("App.exe");
}

しかし、それはいくつかの例外を許します。

4

3 に答える 3

3

このコードを Program.cs に入れることができます。

    static void Application_ThreadException(object sender,
        ThreadExceptionEventArgs e) //Generic error handler
    {
        MyApp.LogException(e.Exception); //Log exception

        BugReport frmBugReport = new BugReport();
        frmBugReport.Error = e.Exception;
        frmBugReport.ShowDialog();

        Environment.Exit(0);
    }

アプリでエラー レポート ダイアログを表示しています。Environment.Exit(0) を Application.Restart() で変更できます(私が覚えているように)。

于 2010-07-10T08:34:40.337 に答える
2

Peter Bromberg は、未処理の例外を処理するさまざまな方法に関する優れた記事を書いています。彼は次のアプローチについて説明しています。

  1. Application.Run() を try-catch ブロックに入れる
  2. Application.ThreadException イベントの使用
  3. AppDomain.UnhandledException イベントの使用
  4. JIT デバッガーをポップアップするレジストリ エントリを追加します。
  5. デバッグ シンボルがインストールされた ADPLUS をクラッシュ モードで使用します。

未処理の例外に関するより良い情報の取得

質問に対する私の以前のコメントについて: クラッシュしたアプリケーションを再起動する緊急の必要がない限り、スタックする可能性があるループのため、アプリケーションを自動的に再起動しません。再起動する必要がある場合は、ユーザーに選択肢を提示します。再起動する前にアプリケーションを再起動してください。そうすれば、うまくいかない場合、ユーザーは救済できます。

于 2010-07-10T11:28:05.810 に答える
1

UnhandledExceptionでイベントにサブスクライブする必要がありますAppDomainhttp://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(VS.71).aspxを参照してください。

于 2010-07-10T08:25:17.867 に答える