在Windows服务中调用Environment.Exit函数

12

在 Windows 服务中调用 Environment.Exit 方法会不会使 SCM 调用服务的 onStop() 方法?这种行为是否不可预测?

我有几个 Windows 服务都有这样的代码。很遗憾,我无法移除这个行为。但我需要知道是否会调用 onStop() 方法,以决定是否要将一些通用的停止代码放在该方法内部或调用 Environment.Exit 的方法中。


可能是Can a service written in .NET self-terminate?的重复问题。 - CodeCaster
1个回答

13

Enviroment.Exit将关闭被服务包装的进程。

因此,调用它不会调用onStop()方法。

您可以自己调用该方法,而不是调用Exit

您可以使用以下代码来调用SCM stop

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

谢谢您的快速回答!!所以这种行为总是可以预料到的,对吗? - Cygnus
这就是您正在寻找的内容:https://dev59.com/3HRB5IYBdhLWcg3wro2B#554292 这是Jon Skeet对评论@CodeCaster发表的答案。 - Ofiris
嗨@Ofiris,我刚看到这个帖子。不知道我们是否可以使用ServiceController类在任何Win服务例程中停止winservice?还是我需要单独的应用程序来停止我的服务?请指导。谢谢。 - Thomas
如果我理解正确,你可以调用ServiceController类的Stop方法。参考:https://dev59.com/3HRB5IYBdhLWcg3wro2B - Ofiris

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