ServiceController.Start() 未达到“正在运行”状态

本文关键字:运行 正在运行 状态 Start 未达到 ServiceController | 更新日期: 2023-09-27 18:32:55

正如标题所说,我正在尝试启动在运行时创建的服务,但我总是最终得到"超时"异常,因为服务状态不会更改为正在运行并挂起永远启动。

这是我的 StartService() 函数:

private void StartService()
{
    ServiceController service = new ServiceController(serviceName);
    try
    {                    
         SaveProject();
         if (!CheckServiceExist(serviceName))
             CreateService();
         TimeSpan timeout = TimeSpan.FromMilliseconds(30000);
         service.Start();
         service.WaitForStatus(ServiceControllerStatus.Running, timeout);
     }
     catch (Exception ex)
     {
         Trace.Writeline(ex.ToString());
     }
}

我可以确认 CreateService() 正在做应该完美无缺的事情。

当我第一次从Visual Studio(2013)打电话时,它如描述的那样发生。但是,当我再次跑步时,它就像一个魅力!当我在Visual Studio之外运行时,它挂在"启动"上,我无法通过Windows任务管理器或Windows服务启动或停止它。

我正在使用WCF和Windows服务,并且StartService()是从按钮命令调用的,如果这有帮助的话。提前谢谢。

ServiceController.Start() 未达到“正在运行”状态

请查看此 MSDN 页面。

在"设置服务状态"

下,您将找到"如果服务需要一段时间才能启动,则报告"启动挂起"状态可能会有所帮助"。有一个详细的说明,如何告诉Windows服务管理器你的服务仍在启动过程中,并避免超时。

// Update the service state to Start Pending.
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
serviceStatus.dwWaitHint = 100000;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);

但是,只有当超时确实是服务实现的问题时,这才会有所帮助。