我正在编写一个应用程序来检查是否安装了某些软件。我的一个案例即时寻找服务。我知道服务的完整路径。即“c:\ some folder \ MyService.exe”我想查看该服务是否已安装并正在运行。我已经尝试了process.GetProcessbyName,但遇到了64位与32位进程的问题。我也尝试过ManagementObject但是我一直在获取无效的对象路径。是否有可能获得只知道可执行文件路径的服务?
我只知道可执行文件的名称和路径。可执行文件可能有多个版本,每个版本都有不同的服务名称,我没有。
答案 0 :(得分:1)
尝试查看ServiceController / Management对象以获取可执行文件路径。然后基于可执行路径确定服务是否正在运行。
借鉴an answer以上
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
也可能返回命令行参数,因此您可能需要编写另一种方法来将路径与参数分开(I&#39; m假设它只是对字符串进行拆分),并在PathName
语句中将If
传递给它。
答案 1 :(得分:0)
以下是检查服务是否已安装的方法,也可以获取服务的状态
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
添加到项目参考