Question

J'ai une application simple avec un seul AppDomain qui est lancée périodiquement sur un serveur. Il arrive parfois qu'une exception non gérée se produise dans la boîte de dialogue des applications et que la boîte de dialogue d'abandon / tentative / ignorer par défaut s'ouvre. Je dois d’une certaine manière empêcher l’edialog de s’afficher et simplement émettre l’exception sur StrErr et fermer l’application. J'ai donc inclus tout le code dans la méthode principale avec l'instruction try-catch, mais cela n'a pas aidé du tout - la boîte de dialogue des exceptions est toujours affichée parfois.

Le code Main () ressemble à ceci:

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

Cette clause try-catch doit capturer toutes les exceptions non gérées et la boîte de dialogue des exceptions ne doit jamais apparaître en popup, autant que je sache. Est-ce que je manque quelque chose? Ou y a-t-il un paramètre (registre, etc.) sur le serveur qui contrôle un comportement spécial lié au code d'erreur d'application / de dialogue d'exception?

Était-ce utile?

La solution

Vous pouvez vous abonner à un événement d'exception non géré dans le domaine d'application.

    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
    }

Autres conseils

Avez-vous envisagé la possibilité que votre clause de capture prévoie des exceptions? Créez-vous des discussions dans votre application principale?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top