2009-06-26 12 views
7

Mam prostą aplikację z pojedynczą aplikacją AppDomain, która jest uruchamiana okresowo na serwerze. Czasem w aplikacji pojawia się nieobsługiwany wyjątek i pojawia się domyślne okno przerwania/ponawiania/ignorowania. Muszę w jakiś sposób zapobiec wyświetlaniu edialog i po prostu wypisać wyjątek na StrErr i zamknąć aplikację. Zamknąłem więc cały kod w głównej metodzie za pomocą instrukcji try-catch, ale to w ogóle nie pomogło - okno dialogowe wyjątków jest czasami wyświetlane.C# aplikacja konsolowa - blokowanie domyślnego okna dialogowego wyjątku

Główny() kod wygląda następująco:

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

to try-catch Powinni złapać wszystkie nieobsłużonych wyjątków i okno wyjątek nie powinien popup AFAIK. Czy czegoś brakuje? Czy istnieje jakieś ustawienie (rejestr itp.) Na serwerze, które kontroluje pewne szczególne zachowanie związane z oknem dialogowym wyjątku/kodem błędu aplikacji?

+0

Czy mówisz o włamaniu do nieobsługiwanych wyjątków? – abhilash

Odpowiedz

20

Istnieje nieobsługiwane zdarzenie wyjątku, które można subskrybować w domenie aplikacji.

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

Cholera, za wolno. ;-) –

+1

Pisałem wściekle, lol :-) –

+0

Nie wykonałem żadnej pracy z aplikacjami wcześniej, po prostu wiem, że moje aplikacje są wykonywane w jednym ... Czy ten kod złapałby wyjątki uruchamiane przez różne wątki? –

0

Czy brałeś pod uwagę możliwość, że twoja klauzula catch może rzucić wyjątki? Czy odradzasz wątki w swojej głównej aplikacji?

+1

nie ma innych tematów - tylko główny wątek. Jedyną możliwością, z jaką klauzula catch podniosłaby wyjątek, jaki widzę teraz, jest exc.StackTrace == null. – Buthrakaur

Powiązane problemy