如何验证 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 服务是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章