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()是从按钮命令调用的,如果这有帮助的话。提前谢谢。
请查看此 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);
但是,只有当超时确实是服务实现的问题时,这才会有所帮助。