我在C#中运行了一个应用程序(在嵌入式XP上运行的2.0),它与作为Windows服务实现的"监视程序"进行通信.设备启动时,此服务通常需要一些时间才能启动.我想从我的代码中检查服务是否正在运行.我怎么能做到这一点?
我猜这样的事情会起作用:
添加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对象.
在这里,您可以在本地计算机上获得所有可用服务及其状态.
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