【问题标题】:throwing an exception in a windows service在 Windows 服务中引发异常
【发布时间】:2009-01-02 19:31:54
【问题描述】:

在 Windows 服务中引发异常是否会使服务崩溃?

即它必须手动重新启动

注意: 我从 catch 子句中抛出异常。

【问题讨论】:

    标签: exception windows-services


    【解决方案1】:

    严格来说并非如此——只有在异常未处理时才会导致问题。

    【讨论】:

      【解决方案2】:

      如果异常未被捕获并返回到 OnStart() 方法,它将使服务崩溃。您通常会在 Windows 事件日志中看到类似于以下内容的消息:

      “MyServiceName Service 服务意外终止。它已经这样做了 x 次。

      【讨论】:

      • 我已经在 try/catch 中包装了当计时器经过时运行的整个方法,没有出现任何错误,但我的服务却卡住了!
      • “干扰”是什么意思?
      • bob:我的意思是它停止处理(从文件夹中移动文件)。
      【解决方案3】:

      我们遇到了子线程上未捕获的异常导致服务停止的问题,而没有提供有关导致异常的任何信息。我们使用这种方法来找出异常的来源。

      你可以给服务放一个Handler来捕获所有未处理的异常(包括服务的所有子线程)。在 VB.NET 中,您需要为 AppDomain.CurrentDomain.UnhandledException 添加一个处理程序。在 C# 中可能类似。然后它会捕捉到任何在你的 onStart 之后冒出来的东西。您可以选择在那里使用它或允许它从那里崩溃服务。

      【讨论】:

      • 我的服务是从线程池中提取的,所以我认为你的建议会有所帮助,谢谢。
      • "在 C# 中可能类似" :)
      【解决方案4】:

      如果您在 Catch 中抛出异常,并且它上面没有任何东西可以重新捕获它,那么这将导致您的服务停止。 OnStart() 方法需要一个 try/catch。如果您不想在发生异常时停止服务,那么您需要处理它(记录并继续,或其他)。

      我的偏好是处理预期的异常,并且有意外的异常会导致服务停止,或者至少自动停止/重新启动。如果发生意外情况,您的服务将在未知状态下运行,谁知道它会做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        相关资源
        最近更新 更多