在Windows服务中抛出异常

时间:2009-01-02 19:31:54

标签: exception windows-services

在Windows服务中抛出异常会导致服务崩溃吗?

即。它必须手动重启

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

4 个答案:

答案 0 :(得分:4)

不严格如此 - 如果未处理异常,它只会导致问题。

答案 1 :(得分:4)

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

“MyServiceName服务服务意外终止。它已经完成了这个x时间。

答案 2 :(得分:3)

我们在子线程上遇到了一个未被捕获的异常问题,导致服务停止而不提供有关导致异常的原因的任何信息。我们使用此方法找出异常的来源。

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

答案 3 :(得分:2)

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

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