2009-01-02 130 views

回答

4

并非严格如此 - 只会在异常未处理时导致问题。

4

如果该异常未被捕获,并且气泡备份到OnStart()方法,则会使服务崩溃。你通常会看到在Windows事件日志类似于以下的消息:

“的服务名服务意外终止它已完成此x时间(s)

+0

我已经包装了在try/catch中计时器运行时运行的整个方法,但没有得到任何错误,但我的服务正在干扰! – Blankman 2009-01-02 19:42:44

+0

“干扰”是什么意思? – bobwienholt 2009-01-02 19:45:39

2

如果你在抛出异常。如果你不想在发生异常时停止这个服务,那么你需要为你的服务提供一个服务。OnStart()方法需要一个try/catch。处理它(记录它,继续前进,或者其他)

我的首选项是处理预期的异常,并且有意外的异常导致服务停止或至少自动停止/重启。意外的事情发生,你的服务将以未知的状态运行,谁知道它会做什么。

3

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

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