我正在使用ServiceController重启Windows服务器。这是我的C#代码。
ServiceController service = new ServiceController("ServiceName");
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, 15000);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, 15000);
我在我的本地机器上工作得很好,如果服务“ServiceName”不存在,它会抛出异常,这没关系。
但是在服务器上我需要运行这个代码,如果不存在“ServiceName”的服务我没有任何例外,代码只是停留在这里:
service.Stop();
它永远等待......结果我无法抓住这一点,我无法做任何事情只是卡住了。
有人能帮助我吗?
答案 0 :(得分:1)
如果您的代码无法找到服务,请不要依赖异常:
ServiceController service = ServiceController.GetServices()
.Where(s => s.ServiceName == "ServiceName")
.SingleOrDefault();
if (service != null)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(15));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(15));
}
else
{
// Couldn't find service
}
注意:我必须更改ServiceControllerStatus.WaitForStaus签名以使用时间跨度