【发布时间】:2009-01-02 19:31:54
【问题描述】:
在 Windows 服务中引发异常是否会使服务崩溃?
即它必须手动重新启动
注意: 我从 catch 子句中抛出异常。
【问题讨论】:
标签: exception windows-services
在 Windows 服务中引发异常是否会使服务崩溃?
即它必须手动重新启动
注意: 我从 catch 子句中抛出异常。
【问题讨论】:
标签: exception windows-services
严格来说并非如此——只有在异常未处理时才会导致问题。
【讨论】:
如果异常未被捕获并返回到 OnStart() 方法,它将使服务崩溃。您通常会在 Windows 事件日志中看到类似于以下内容的消息:
“MyServiceName Service 服务意外终止。它已经这样做了 x 次。
【讨论】:
我们遇到了子线程上未捕获的异常导致服务停止的问题,而没有提供有关导致异常的任何信息。我们使用这种方法来找出异常的来源。
你可以给服务放一个Handler来捕获所有未处理的异常(包括服务的所有子线程)。在 VB.NET 中,您需要为 AppDomain.CurrentDomain.UnhandledException 添加一个处理程序。在 C# 中可能类似。然后它会捕捉到任何在你的 onStart 之后冒出来的东西。您可以选择在那里使用它或允许它从那里崩溃服务。
【讨论】:
如果您在 Catch 中抛出异常,并且它上面没有任何东西可以重新捕获它,那么这将导致您的服务停止。 OnStart() 方法需要一个 try/catch。如果您不想在发生异常时停止服务,那么您需要处理它(记录并继续,或其他)。
我的偏好是处理预期的异常,并且有意外的异常会导致服务停止,或者至少自动停止/重新启动。如果发生意外情况,您的服务将在未知状态下运行,谁知道它会做什么。
【讨论】: