我有一个Windows服务,我试图使用ServiceController.Stop()
进行编程:
ServiceController sc = new ServiceController(<ServiceName>);
sc.Stop();
sc.Refresh();
但是,当我在“服务”列表中看到此服务时,其状态仍为“已启动”。如果我调用方法sc.WaitForStatus()
等待状态更改为“已停止”,则永远不会达到此状态。
出了什么问题?
答案 0 :(得分:1)
我认为问题在于遗留代码。
我们需要一些配置,并且要求是配置文件中缺少配置,不应该启动服务。此验证在OnStart()
中完成。验证失败时,ServiceController.Stop()
方法本身会调用OnStart()
!我认为这就是ServiceController.Stop()
无法停止服务的原因,我在WaitForStatus()
方法调用中从未获得“已停止”状态。
我更改了逻辑,现在我没有调用ServiceBase.Run()
方法(调用OnStart()
),如果缺少必要的配置。
遗留代码试图从Start方法停止服务!