正如标题所说,我试图启动在运行时创建的服务,但我总是最终得到“超时”#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(),如果这有帮助的话。提前谢谢。
答案 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);
但这只会在超时确实是您服务实施的问题时才有用。