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

Posted

技术标签:

【中文标题】如何验证 Windows 服务是不是正在运行【英文标题】:How can I verify if a Windows Service is running如何验证 Windows 服务是否正在运行 【发布时间】:2010-09-15 17:49:18 【问题描述】:

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

【问题讨论】:

请查看 .NET 中的 ServiceController 对象。 噢……甚至比通过 WMI 滚动自己的代码还要好。我会删除我的答案。 @EBGreen - 我不知道,WMI 路线将来可能对其他人有用,给猫剥皮的方法不止一种,等等...... 是的,但我确实认为 ServiceController 总体上更好,所以我想我会删除它。如果我不是刚醒来,我什至不会建议 WMI。 :) 【参考方案1】:

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

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()

参考:ServiceController .NET 中的对象。

【讨论】:

ServiceController.GetServices() 检索包含所有已安装服务的数组作为 ServiceController 对象。这可能会有很大帮助。 添加对System.ServiceProcess的引用并添加语句:using System.ServiceProcess; 如果我传递了一个错误的服务名称,它似乎会锁定而不是抛出错误。我添加了这段代码:catch (System.Exception ex) return "Not found"; NealWalters:你怎么知道只是因为找不到服务而引发了异常?难道没有更合适的异常类型可以捕获吗? private static bool ServiceExists(string serviceName) return ServiceController.GetServices().FirstOrDefault(s => s.ServiceName == serviceName) != null; 【参考方案2】:

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

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.aspx 还有http://msdn.microsoft.com/en-us/library/microsoft.windows.design.servicemanager(v=vs.90).aspx

【讨论】:

这性能很差,因为您必须遍历系统上当前安装的每个服务以搜索单个服务。我推荐使用这个***.com/a/178162/5262734

以上是关于如何验证 Windows 服务是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章

怎么验证MYSQL是不是成功安装!

如何在 Win 7 中为 C 中的 Windows 服务检索系统代理设置

win10怎么查看ssh是不是开启

win2008 R2怎么查看是不是已经真正激活

win10安装.net4.8安装失败?

如何让windows安全中心服务开机自动启动