如何验证Windows服务是否正在运行

时间:2008-10-07 12:06:00

标签: c# windows-services watchdog

我在C#中运行了一个应用程序(在嵌入式XP上运行的2.0),它与作为Windows服务实现的“监视程序”进行通信。设备启动时,此服务通常需要一些时间才能启动。我想从我的代码中检查服务是否正在运行。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:328)

我想这样的事情会起作用:

System.ServiceProcess添加到项目引用中(它位于.NET选项卡上)。

using System.ServiceProcess;

ServiceController sc = new ServiceController(SERVICENAME);

switch (sc.Status)
{
    case ServiceControllerStatus.Running:
        return "Running";
    case ServiceControllerStatus.Stopped:
        return "Stopped";
    case ServiceControllerStatus.Paused:
        return "Paused";
    case ServiceControllerStatus.StopPending:
        return "Stopping";
    case ServiceControllerStatus.StartPending:
        return "Starting";
    default:
        return "Status Changing";
}

编辑:还有一个方法sc.WaitforStatus(),它采用了所需的状态和超时,从未使用它,但它可能适合您的需要。

修改:获得状态后,要再次获取状态,您需要先致电sc.Refresh()

参考:.NET中的ServiceController对象。

答案 1 :(得分:20)

请查看.NET中的ServiceController对象。

答案 2 :(得分:12)

您可以在此处获得所有可用服务及其在本地计算机中的状态。

ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
    Console.WriteLine(service.ServiceName+"=="+ service.Status);
}

您可以将您的服务与循环中的service.name属性进行比较,并获得服务的状态。 有关详情,请转到http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspxhttp://msdn.microsoft.com/en-us/library/microsoft.windows.design.servicemanager(v=vs.90).aspx