当.Net服务崩溃时,是否会调用ServiceBase.OnStop方法?无论是否调用OnStop方法,服务都会被标记为已停止吗?
答案 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。这应该可以保证你在异常情况下进行某种记录。