【问题标题】:Global exception handler for windows services?Windows 服务的全局异常处理程序?
【发布时间】:2010-12-13 12:27:41
【问题描述】:

有没有办法全局处理 Windows 服务的异常? Windows 窗体应用程序中类似于以下内容:

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

【问题讨论】:

  • Windows 服务最相关的答案可以在这里找到:stackoverflow.com/a/5117790/986720 它解释了为什么 AppDomainUnhandledException 处理程序没有捕获到异常

标签: c# .net exception windows-services


【解决方案1】:

你试过了吗

AppDomain.CurrentDomain.UnhandledException

这将触发给定域中未处理的异常,无论它们发生在哪个线程上。如果您的 Windows 服务使用多个 AppDomain,则您需要为每个域使用此值,但大多数都不需要。

【讨论】:

  • 如果您的服务使用System.Timers.Timer 计时器运行并在Elapsed 事件中定期工作,那么AppDomain.CurrentDomain.UnhandledException 事件将不会看到在该事件中引发的未处理异常。计时器只是吞下它们,除此之外什么都不做。
  • 我知道这是一个旧线程。这同样适用于 System.Threading.Timers 吗?
  • @BillGreer,是的,不幸的是它也适用于 SystemThreading.Timers。
【解决方案2】:

我们建议人们在他们的 Windows 应用程序中实现 http://exceptioneer.com 时使用一些非常强大的代码。

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
        }

    }
}

谢谢,

菲尔。

【讨论】:

  • 与 Windows 服务相关的“应用程序”在哪里?
  • 您的评论得到答复了吗? “应用程序”在哪里
  • Application (msdn.microsoft.com/en-us/library/…) 上面的大部分代码都是特定于 WinForms 的,与 Windows 服务无关。 AppDomain.CurrentDomain.UnhandledException 是服务的重要部分。有关异常处理的讨论,另请参阅 stackoverflow.com/questions/2456819/…
猜你喜欢
  • 2014-04-17
  • 2012-12-31
  • 2011-05-19
  • 2011-08-31
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多