Domanda

Ho una semplice applicazione con AppDomain singola che viene periodicamente lanciata su un server. A volte si verifica un'eccezione non gestita nell'applicazione e viene visualizzata la finestra di dialogo abort / retry / ignore predefinita. Devo in qualche modo impedire la visualizzazione di edialog e generare l'eccezione su StrErr e chiudere l'applicazione. Quindi ho racchiuso tutto il codice nel metodo principale con l'istruzione try-catch, ma non ha aiutato affatto - la finestra di dialogo delle eccezioni viene ancora mostrata a volte.

Il codice Main () è simile al seguente:

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

Questa clausola try-catch dovrebbe rilevare tutte le eccezioni non gestite e la finestra di dialogo delle eccezioni non dovrebbe mai visualizzare AFAIK. Mi sto perdendo qualcosa? Oppure c'è qualche impostazione (registro, ecc.) Sul server che controlla alcuni comportamenti speciali relativi alla finestra di dialogo delle eccezioni / al codice di errore dell'applicazione?

È stato utile?

Soluzione

Esiste un evento di eccezione non gestito a cui puoi iscriverti nel dominio dell'applicazione.

    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
    }

Altri suggerimenti

Hai considerato la possibilità che la tua clausola di cattura possa generare eccezioni? Generi discussioni nella tua app principale?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top