ServiceController只是卡住而没有任何异常

时间:2011-04-14 14:02:23

标签: c# servicecontroller

我正在使用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();

它永远等待......结果我无法抓住这一点,我无法做任何事情只是卡住了。
有人能帮助我吗?

1 个答案:

答案 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签名以使用时间跨度