Pregunta

Tengo una aplicación simple con AppDomain único que se inicia periódicamente en un servidor. A veces se produce una excepción no controlada en la aplicación y aparece el cuadro de diálogo predeterminado de abortar / reintentar / ignorar. Necesito evitar de alguna manera que se muestre el edialog y solo generar la excepción en StrErr y cerrar la aplicación. Así que adjunté todo el código en el método principal con la declaración try-catch, pero no ayudó en absoluto: el diálogo de excepción todavía se muestra a veces.

El código Main () se ve así:

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 cláusula try-catch debe capturar todas las excepciones no controladas y el cuadro de diálogo de excepción nunca debería aparecer AFAIK. ¿Me estoy perdiendo de algo? ¿O hay alguna configuración (registro, etc.) en el servidor que controla algún comportamiento especial relacionado con el diálogo de excepción / código de error de la aplicación?

¿Fue útil?

Solución

Hay un evento de excepción no controlado 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
    }

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top