【问题标题】:ServiceController just get stuck without any exceptionsServiceController 只是卡住了,没有任何异常
【发布时间】:2011-04-14 14:02:23
【问题描述】:

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

它会永远等待......结果我无法捕捉到这个,我无法做任何它卡住的事情。
有人可以帮帮我吗?

【问题讨论】:

    标签: c# servicecontroller


    【解决方案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 签名以使用时间跨度

    【讨论】:

    • 事实上我需要关注:ServiceController service = ServiceController.GetServices("MachineName") .Where(s => s.ServiceName == "ServiceName") .SingleOrDefault(); 如果“MachineName”不存在,它就会卡在这里
    • 如果您试图控制与执行代码不同的机器上的服务,则使用 MachineName 重载。如果您需要包含机器名称,我猜您是在尝试控制另一台机器上的服务,那么执行代码的用户是否可以访问相关机器?
    • 他没有。但是,我认为,在这种情况下,我应该得到一个异常(我确实在本地得到了异常)但是在远程服务器上,这段代码应该正在运行,我没有得到任何异常:(。
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2015-03-29
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多