gpt4 book ai didi

c# - ServiceController.Start() 未达到 "Running"状态

转载 作者:太空宇宙 更新时间:2023-11-03 15:26:23 25 4
gpt4 key购买 nike

正如标题所说,我试图启动一个在运行时创建的服务,但我总是以“超时”异常告终,因为服务状态不会更改为“正在运行”并且永远卡在“启动”上。

这是我的 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);

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

关于c# - ServiceController.Start() 未达到 "Running"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com