c # Konsolenanwendung - verhindert Standard-Exception-Dialog
-
20-08-2019 - |
Frage
Ich habe einfache Anwendung mit einzelnen AppDomain welches regelmäßig mit auf einem Server gestartet wird. Manchmal tritt nicht behandelte Ausnahme in der Anwendung und Standard-Abbruch / Retry / ignoriert Dialog Pops. Ich muss irgendwie die edialog verhindern, zeigt und nur Ausgangs die Ausnahme auf StrErr und die Anwendung zu schließen. So eingeschlossen ich den gesamten Code in main-Methode mit try-catch-Anweisung, aber es hat nicht helfen -. Die Ausnahme Dialog noch manchmal dargestellt wird
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);
}
Die Try-catch-Klausel shoud alle unbehandelten Ausnahmen fangen und der Ausnahme-Dialog sollte AFAIK nie Popup. Bin ich etwas fehlt? Oder gibt es eine Einstellung (Registry usw.) auf dem Server, das etwas besonderes Verhalten steuert im Zusammenhang mit der Ausnahme Dialog / Anwendung Fehlercode?
Lösung
Es gibt eine nicht behandelte Ausnahme Ereignis, 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
}
Andere Tipps
Haben Sie die Möglichkeit in Betracht gezogen, dass Ihre catch-Klausel werfen Ausnahmen geben kann? Haben Sie Threads in Ihrem Haupt-App laichen?