1

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

它永远等待......结果我无法抓住这个,我无法做任何它卡住的事情。
有谁能够帮我?

4

1 回答 1

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

于 2011-04-14T14:26:22.607 回答