Консольное приложение C# – предотвратить диалоговое окно исключения по умолчанию

StackOverflow https://stackoverflow.com/questions/1048045

Вопрос

У меня есть простое приложение с одним AppDomain, которое периодически запускается на сервере.Иногда в приложении возникает необработанное исключение, и появляется диалоговое окно прерывания/повторения/игнорирования по умолчанию.Мне нужно как-то запретить отображение edialog, просто вывести исключение на StrErr и закрыть приложение.Поэтому я включил весь код в основной метод с помощью оператора 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.Я что-то пропустил?Или есть ли на сервере какая-либо настройка (реестр и т. д.), которая управляет каким-то особым поведением, связанным с кодом ошибки диалога исключения/приложения?

Это было полезно?

Решение

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

    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
    }

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top