在onStart()方法中停止windows服务

Tar*_*ied 4 c# windows-services

onStart()当客户没有许可证时,我想在方法中停止Windows服务.我用service.Stop(),但它不起作用.

protected override void OnStart(string[] args)
{
    try
    {
        _bridgeServiceEventLog.WriteEntry("new OnStart");
                 if (LicenseValidetor.ValidCountAndTypeDevices())
            {
                WsInitializeBridge();
            }
                 else
                 {
                      service = new ServiceController("BridgeService");
                      service.Stop();
                     _bridgeServiceEventLog.WriteEntry("LicenseValidetor Error");
                 }
        _bridgeServiceEventLog.WriteEntry("end Start");
    }
    catch (Exception e)
    {
        _bridgeServiceEventLog.WriteEntry("error In onstart method ");
    }

}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 7

您无法在OnStart同一服务的方法中停止服务.

ServiceController.Stop内部调用的方法ControlService(或它的Ex对应方式).请注意,此功能失败的原因之一是:

ERROR_SERVICE_CANNOT_ACCEPT_CTRL 无法将请求的控制代码发送到服务,因为服务的状态为SERVICE_STOPPED,SERVICE_START_PENDINGSERVICE_STOP_PENDING.

好吧,猜猜看 - 当你进入你的OnStart方法时,你的服务状态是SERVICE_START_PENDING.


处理这种情况的正确方法是发出任何其他线程的信号,表明您可能已经开始让它们退出,然后退出您的OnStart方法.服务控制管理器将注意到该进程已退出并将您的服务状态还原为SERVICE_STOPPED.它还可以通知交互式用户"服务已启动然后停止"或此类词语.