用.NET编写的服务可以自行终止吗?

时间:2009-02-16 19:24:29

标签: c# windows-services

我有一个用C#编写的服务应用程序,在某些情况下,我希望它能自行终止。这将在服务运行一段时间后发生,因此OnStart()事件中不会发生这种情况。

到目前为止,我所阅读的所有内容都表明,终止服务的唯一安全方法是通过服务控制管理器。我的服务作为本地服务运行,并且没有启动或停止服务的权限,因此我无法从服务本身访问SCM。还有另一种方法可以自我终止,同时仍然按照SCM的规则进行游戏吗?

4 个答案:

答案 0 :(得分:35)

答案 1 :(得分:8)

如果要终止服务而不是停止服务(可能是因为服务已捕获到其他未处理的异常),您可以使用Environment.Exit(1)(如果需要,可以使用其他退出代码)。

Windows会发现服务意外终止。如果已将服务配置为恢复,则将使用恢复过程,其中包括重新启动服务,运行程序或重新启动计算机的选项。

答案 2 :(得分:5)

如果您让所有正在执行的线程完成,会发生什么?我可以想象三种可能的结果:

  • SCM通知,并决定你做得恰当
  • SCM通知,认为你已经死了,然后重新启动你
  • SCM没有注意到,并显示您仍在运行

编辑:我怀疑this answer是最好的,但为了感兴趣,我会暂时(暂时)这样做。

答案 3 :(得分:-2)

不要在本地服务下运行服务。让它在有权停止服务的用户下运行。

虽然自我终止服务的想法不是最好的想法。仅这一事实意味着它应该是一个应用程序,而不是一个服务。