194

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

4

2 回答 2

396

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

添加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对象。

于 2008-10-07T12:10:39.240 回答
19

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

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

于 2014-06-24T07:48:58.367 回答