以编程方式检查Windows服务是否正在运行c#

时间:2017-10-04 19:21:02

标签: c#

我正在编写一个应用程序来检查是否安装了某些软件。我的一个案例即时寻找服务。我知道服务的完整路径。即“c:\ some folder \ MyService.exe”我想查看该服务是否已安装并正在运行。我已经尝试了process.GetProcessbyName,但遇到了64位与32位进程的问题。我也尝试过ManagementObject但是我一直在获取无效的对象路径。是否有可能获得只知道可执行文件路径的服务?

我只知道可执行文件的名称和路径。可执行文件可能有多个版本,每个版本都有不同的服务名称,我没有。

2 个答案:

答案 0 :(得分:1)

尝试查看ServiceController / Management对象以获取可执行文件路径。然后基于可执行路径确定服务是否正在运行。

如何获取可执行路径:[1] [2] [3]

借鉴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添加到项目参考