C# Windows服务自我终止服务

7

如何使一个服务自行终止?

使用 Environment.Exit 可以让应用程序终止,但服务仍在运行。

有什么想法吗?

1个回答

16

你可以使用SCM在服务内部关闭自己的服务:

System.ServiceProcess.ServiceController svc = new System.ServiceProcess.ServiceController("NameOfYourService");
svc.Stop();

编辑:

另一种选择是在你的服务中调用ServiceBase.Stop() - 如果你可以访问你的ServiceBase派生类实例,这将是更加干净的方式 - 在许多情况下,通过传递该依赖项来做到这点可能过于繁琐。

如果你有未捕获的异常,我个人会让服务崩溃(或记录并throw),这将在事件日志中留下终止原因的详细信息。如果你确实需要,你可以捕获异常,然后调用ServiceBase.Stop()


我可以在启动服务的类之外的异常中使用这个吗? - user222427
@Mike:更新了更多的解释-不确定我是否正确理解了您所说的“异常内部”的部分-您能解释一下吗? - BrokenGlass
我有一个try{} catch{}块,它被包含在while{}循环中。问题是,如果这个try失败了,我需要整个服务停止。我在Service1.cs中调用服务停止,我需要在另一个类中实现这个功能。 - user222427
在service1.cs中,我加入了以下代码: public static void ForceStop() { Service1.ForceStop(); Environment.Exit(1); }那么,在我的catch语句块中,我可以这样调用它吗?{Service1.ForceStop()} - user222427
好的,不要笑,但我不知道如何设置对象引用,在上面的代码中,对象引用是什么? - user222427
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接