[英]Programmatically check if a windows service is running c#
我正在编写一个应用程序来检查是否安装了某些软件。 我的一个案例正在寻找服务。 我知道服务的完整路径。 ie "c:\\some folder\\MyService.exe" 我想检查服务是否安装并运行。 我尝试过 process.GetProcessbyName,但遇到了 64 位与 32 位进程的问题。 我也试过 ManagementObject,但我一直收到无效的对象路径。 是否有可能获得只知道可执行文件路径的服务?
我只知道可执行文件的名称和路径。 也可能有多个版本的可执行文件,每个版本都有不同的服务名称,而我没有。
尝试查看可执行路径的 ServiceController / Management 对象。 然后根据可执行路径确定服务是否正在运行。
借用上面的回答
ManagementClass mc = new ManagementClass("Win32_Service");
foreach(ManagementObject mo in mc.GetInstances())
{
if(mo.GetPropertyValue("PathName").ToString().Trim('"') == "<your executable path>")
{
return mo.GetPropertyValue("Name").ToString(); // or return true;
}
}
我还没有测试过这个,并且评论建议PathName
也可能返回命令行参数,因此您可能需要编写另一种方法来将路径与参数分开(我假设它只是字符串上的拆分),并在If
语句中将PathName
传递给它..
以下是检查服务是否已安装以及获取服务状态的方法
public static string CheckService(string ServiceName)
{
//check service
var services = ServiceController.GetServices();
string serviceStatu = string.Empty;
bool isServiceExist = false;
foreach (var s in services)
{
if (s.ServiceName == ServiceName)
{
serviceStatu = "Service installed , current status: " + s.Status;
isServiceExist = true;
}
}
if (!isServiceExist)
{
serviceStatu= "Service is not installed";
}
return serviceStatu;
}
Console.WriteLine(CheckService("Service name"));
您需要将System.ServiceProcess
添加到项目引用中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.