Подтвердить что ты не робот

Глобальный обработчик исключений для служб Windows?

Есть ли способ глобально обрабатывать исключения для службы Windows? Что-то похожее на следующее в приложениях Windows Forms:

Application.ThreadException += new ThreadExceptionEventHandler(new ThreadExceptionHandler().ApplicationThreadException);
4b9b3361

Ответ 1

Вот какой довольно прочный код, который мы советуем людям использовать, когда они реализуют http://exceptioneer.com в своих приложениях Windows.

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
            //Handle your Exception here
        }

    }
}

Спасибо,

Фил.

Ответ 2

Вы пробовали

AppDomain.CurrentDomain.UnhandledException

Это приведет к сбою необработанных исключений в заданном домене независимо от того, какой поток они встречаются. Если ваша служба Windows использует несколько приложений AppDomains, вам нужно будет использовать это значение для каждого домена, но большинство из них этого не делают.