繁体   English   中英

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

[英]Programmatically check if a windows service is running c#

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

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

尝试查看可执行路径的 ServiceController / Management 对象。 然后根据可执行路径确定服务是否正在运行。

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

借用上面的回答

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM