2009-06-26 14 views
7

私は、サーバー上で定期的に起動される単一のAppDomainを持つ単純なアプリケーションを持っています。アプリケーションで処理されない例外が発生し、デフォルトの中止/再試行/無視ダイアログがポップアップすることがあります。私は何らかの方法でedialogが表示されないようにし、StrErrの例外を出力してアプリケーションを終了する必要があります。だから私はメインメソッドのすべてのコードをtry-catch文で囲んだが、それはまったく助けにならなかった - 例外ダイアログは時には時々表示される。c#console application - デフォルトの例外ダイアログを表示しない

メイン()のコードは次のようになります。

try 
{ 
    RunApplication(); 
} 
catch (Exception exc) 
{ 
    Console.Error.WriteLine(exc.ToString()); 
    Console.Error.WriteLine(exc.StackTrace); 
    if (exc.InnerException != null) 
    { 
     Console.Error.WriteLine(exc.InnerException.ToString()); 
     Console.Error.WriteLine(exc.InnerException.StackTrace); 
    } 
    Environment.Exit(666); 
} 

これのtry-catch句は、すべての未処理の例外をキャッチshoudと例外ダイアログでは、私の知る限りをポップアップすることはありません。何か不足していますか?または、例外ダイアログ/アプリケーションエラーコードに関連するいくつかの特別な動作を制御するサーバー上の設定(レジストリなど)はありますか?

+0

処理されない例外に侵入することについて話していますか? – abhilash

答えて

20

アプリケーションドメインでサブスクライブできる未処理の例外イベントがあります。

public static void Main() 
    { 
     AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException); 

     //some code here.... 
    } 

    /// <summary> 
    /// Occurs when you have an unhandled exception 
    /// </summary> 
    public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) 
    { 
     //here's how you get the exception 
     Exception exception = (Exception)e.ExceptionObject; 

     //bail out in a tidy way and perform your logging 
    } 
+0

あまりにも遅い。 ;-) –

+1

私は激しく、笑いながら入力していました:-) –

+0

私はappdomainsを使って作業をしませんでした。私のアプリケーションが内部で実行されていることを知っています... –

0

catch節が例外をスローする可能性があると考えましたか? メインアプリにスレッドを生成しますか?

+1

他のスレッドはありません。メインスレッドだけです。 catch節が出る唯一の可能性は、exc.StackTrace == nullのときです。 – Buthrakaur

関連する問題