我在C#(运行于XP嵌入式)上运行的应用程序正在与作为Windows服务实现的“看门狗”通信。设备启动时,此服务通常需要一段时间才能启动。我想从我的代码中检查服务是否正在运行。我怎样才能做到这一点?如何验证Windows服务是否正在运行
150
A
回答
290
我想这样的事情会的工作:
添加System.ServiceProcess到您的项目引用(这是.NET选项卡上)。
的快捷方式:
return new ServiceController(SERVICE_NAME).Status == ServiceControllerStatus.Running;
的更安全的方式:
try
{
using(ServiceController sc = new ServiceController(SERVICE_NAME))
{
return sc.Status == ServiceControllerStatus.Running;
}
}
catch(ArgumentException) { return false; }
catch(Win32Exception) { return false; }
的详细方法:
using System.ServiceProcess;
//
ServiceController sc;
try
{
sc = new ServiceController(SERVICE_NAME);
}
catch(ArgumentException)
{
return "Invalid service name."; // Note that just because a name is valid does not mean the service exists.
}
using(sc)
{
ServiceControllerStatus status;
try
{
sc.Refresh(); // calling sc.Refresh() is unnecessary on the first use of `Status` but if you keep the ServiceController in-memory then be sure to call this if you're using it periodically.
status = sc.Status;
}
catch(Win32Exception ex)
{
// A Win32Exception will be raised if the service-name does not exist or the running process has insufficient permissions to query service status.
// See Win32 QueryServiceStatus()'s documentation.
return "Error: " + ex.Message;
}
switch(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中的对象。
18
请看看.NET中的ServiceController对象。
9
在这里,您可以在本地机器中获得所有可用服务及其状态。
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
相关问题
- 1. 如何验证nginx是否在运行?
- 2. 如何验证Windows服务是否停止或正在运行,并等待它处于此状态?
- 3. 验证Cloudera Hadoop服务是否在容器中运行
- 4. 检查服务是否正在运行?
- 5. 检查服务是否正在运行
- 6. 如何通过Windows命令行确定ALBD服务是否正在运行?
- 7. 检查一个Windows服务是否正在运行?
- 8. 如何从命令行测试服务是否正在运行
- 9. 如何确定类库是否在Windows服务中运行?
- 10. 如何在Linux上检查服务是否正在运行Mint
- 11. 如何在安装前检查服务是否正在运行?
- 12. 脚本来检查Windows服务是否正在运行以及是否不启动该服务。 Windows 2000
- 13. 如何在Windows上运行Google App Engine Web服务器是否正确?
- 14. 如何验证电子邮件脚本是否正确运行?
- 15. C程序 - 如何检查Web服务是否正在运行
- 16. 如何知道hbase服务器是否正在运行
- 17. android如何检查服务是否正在运行
- 18. 如何检查Redis服务器是否正在运行
- 19. 如何查找solr服务器是否正在运行
- 20. 如何检查服务是否正在运行
- 21. 如何找出Web服务是否正在运行?
- 22. 如何确定Azure服务是否正在运行
- 23. 如何知道emacs服务器是否正在运行
- 24. 如何检查硒服务器是否正在运行?
- 25. 检查SQL服务器服务是否正在运行
- 26. 如何验证一系列rake任务是否正确运行?或者,有耙
- 27. 是否可以验证Windows服务是否从另一台计算机上运行?
- 28. 如何验证Windows服务是否已安装并使用批处理文件运行
- 29. 如何验证服务是否已部署在SF中
- 30. 验证网址是否有效并正在运行
Oooh ...甚至比通过WMI滚动自己的更好。我会删除我的答案。 – EBGreen 2008-10-07 12:12:50
@EBGreen - 我不知道,WMI路线可能对未来的其他人有用,有不止一种方式来剥皮猫,以及所有这些.... – Carl 2008-10-07 12:16:06