2009-06-26 13 views
7

Tengo una aplicación simple con un solo dominio de aplicación que se inicia periódicamente en un servidor. En ocasiones, se produce una excepción no controlada en la aplicación y aparece el cuadro de diálogo predeterminado abort/retry/ignore. Necesito de alguna manera evitar que se muestre el edialog y simplemente generar la excepción en StrErr y cerrar la aplicación. Así que encerré todo el código en el método principal con la declaración try-catch, pero no sirvió de nada, el cuadro de diálogo de excepciones se muestra algunas veces.aplicación consola C# - evitar diálogo de excepción predeterminado

el código principal() tiene el siguiente aspecto:

cláusula
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); 
} 

Esta captura incidental tratar shoud captura todas las excepciones no controladas y el diálogo de excepción nunca debe popup que yo sepa. ¿Me estoy perdiendo de algo? ¿O hay alguna configuración (registro, etc.) en el servidor que controla algún comportamiento especial relacionado con el código de error de la excepción/aplicación?

+0

¿Está hablando de romper excepciones no controladas? – abhilash

Respuesta

20

Hay un evento de excepción no controlada al que puede suscribirse en el dominio de la aplicación.

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

Maldita sea, demasiado lento. ;-) –

+1

Estaba escribiendo furiosamente, lol :-) –

+0

No he hecho ningún trabajo con aplicaciones antes, solo sé que mis aplicaciones se ejecutan dentro de una ... ¿Podría este código capturar excepciones que disparan desde diferentes subprocesos? –

0

¿Ha considerado la posibilidad de que su cláusula catch pueda arrojar excepciones? ¿Engendras hilos en tu aplicación principal?

+1

no hay otros hilos, solo el hilo principal. La única posibilidad de que la cláusula catch plantee la excepción que puedo ver ahora es cuando exc.StackTrace == null. – Buthrakaur

Cuestiones relacionadas