консольное приложение c # - запретить диалог исключений по умолчанию - PullRequest
7 голосов
/ 26 июня 2009

У меня есть простое приложение с одним AppDomain, которое периодически запускается на сервере. Иногда необработанное исключение возникает в приложении, и появляется диалоговое окно по умолчанию abort / retry / ignore. Мне нужно как-то запретить показ edialog и просто вывести исключение на StrErr и закрыть приложение. Поэтому я вложил весь код в метод main с помощью оператора try-catch, но это совсем не помогло - иногда по-прежнему отображается диалог исключения.

Код Main () выглядит следующим образом:

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

Это предложение try-catch должно отлавливать все необработанные исключения, и диалог исключений никогда не должен появляться AFAIK. Я что-то пропустил? Или на сервере есть какие-либо настройки (реестр и т. Д.), Которые управляют специальным поведением, связанным с диалогом исключения / кодом ошибки приложения?

Ответы [ 2 ]

20 голосов
/ 26 июня 2009

Существует необработанное исключение, на которое вы можете подписаться в домене приложения.

    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 голосов
/ 26 июня 2009

Рассматривали ли вы возможность того, что в вашем предложении catch могут быть исключения? Вы порождаете темы в своем основном приложении?

...