ServiceController.Start()没有达到"运行"状态

时间:2016-02-01 17:32:03

标签: c# wcf windows-services

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

这是我的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服务,并且从按钮Command调用StartService(),如果这有帮助的话。提前谢谢。

1 个答案:

答案 0 :(得分:0)

请查看此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);

但这只会在超时确实是您服务实施的问题时才有用。