当.Net 2.0服务崩溃时是否调用ServiceBase.OnStop?

时间:2008-12-17 20:22:10

标签: .net windows-services

当.Net服务崩溃时,是否会调用ServiceBase.OnStop方法?无论是否调用OnStop方法,服务都会被标记为已停止吗?

3 个答案:

答案 0 :(得分:1)

使用try-catch并自己调用OnStop;不要依赖'自动停止',即使它是'保证',它仍然不是一个好主意。服务应尽可能健全。

答案 1 :(得分:0)

如果崩溃意味着您的服务中存在未处理的异常,则答案是否定的OnStop将不会被调用。通常,服务将标记为已停止。但是Steven是正确的,每个'root'方法必须有一个try-catch块,围绕任何可能抛出异常的代码,你的服务永远不应该有一个未处理的异常。

答案 2 :(得分:0)

只有在实际告知服务停止时才会调用OnStop()。这不包括例如sytem powerdown,因为有一个单独的方法来覆盖它(称为OnShutdown())。

您在OnStop()中的任何内容应该只是一个单独的方法,可以从OnStop()OnShutdown()

调用

至于捕获奇怪的意外异常,我建议在try / catch中包含ServiceBase.Run()调用,并记录catch claus。这应该可以保证你在异常情况下进行某种记录。