2009-06-26 7 views
7

Ich habe einfache Anwendung mit einzelnen AppDomain, die regelmäßig auf einem Server gestartet wird. Manchmal tritt in der Anwendung eine nicht behandelte Ausnahme auf, und das Standardabbruch-/Wiederholungs-/Ignorierdialogfeld erscheint. Ich muss irgendwie verhindern, dass der Edialog angezeigt wird und nur die Ausnahme auf StrErr ausgeben und die Anwendung schließen. Also habe ich den ganzen Code in der main-Methode mit try-catch-Anweisung eingeschlossen, aber es hat überhaupt nicht geholfen - der Ausnahme-Dialog wird manchmal noch angezeigt.C# Konsolenanwendung - Standard-Ausnahmedialog verhindern

Der Main() Code sieht wie folgt aus:

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); 
} 

Diese try-catch-Klausel shoud alle unbehandelten Ausnahmen fangen und die Ausnahme-Dialog sollte nie AFAIK Popup. Fehle ich etwas? Oder gibt es eine Einstellung (Registrierung usw.) auf dem Server, die ein bestimmtes Verhalten im Zusammenhang mit dem Ausnahmedialog/Anwendungsfehlercode steuert?

+0

Sprechen Sie darüber, in unbehandelte Ausnahmen einzubrechen? – abhilash

Antwort

20

Es gibt ein unbehandeltes Ausnahmeereignis, das Sie in der Anwendungsdomäne abonnieren können.

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

Verdammt, zu langsam. ;-) –

+1

Ich tippte wütend, lol :-) –

+0

Ich habe noch nie mit appdomains gearbeitet, ich weiß nur, dass meine Anwendungen in einem ausgeführt werden ... Würde dieser Code Ausnahmen fangen, die von verschiedenen Threads ausgehen? –

0

Haben Sie die Möglichkeit in Betracht gezogen, dass Ihre Fangklausel Ausnahmen auslösen kann? Spawnen Sie Threads in Ihrer Haupt-App?

+1

gibt es keine anderen Threads - nur der Hauptthread. Die einzige Möglichkeit, dass die catch-Klausel eine Ausnahme auslöst, die ich jetzt sehen kann, ist exc.StackTrace == null. – Buthrakaur

Verwandte Themen