【问题标题】:how to get phyiscal path of windows service using .net?如何使用.net 获取 Windows 服务的物理路径?
【发布时间】:2010-04-28 10:23:01
【问题描述】:

我必须在 .Net Admin 应用程序中获取 Windows 服务的绝对路径。我正在使用 .Net 的 ServiceController,如下所示。

ServiceController serviceController = new  ServiceController(serviceName);

但我在这里看不到任何属性来获取服务的 .exe 的绝对路径。有没有办法以编程方式获得这个。

【问题讨论】:

    标签: .net windows-services administration servicecontroller


    【解决方案1】:

    您可以使用 WMI 获得此信息,这需要对 System.Management 的程序集引用:

    using System.Management;
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetPathOfService("eventlog"));
            Console.ReadLine();
        }
    
        public static string GetPathOfService(string serviceName)
        {
            WqlObjectQuery wqlObjectQuery = new WqlObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName));
            ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(wqlObjectQuery);
            ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
    
            foreach (ManagementObject managementObject in managementObjectCollection)
            {
                return managementObject.GetPropertyValue("PathName").ToString();
            }
    
            return null;
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果它不是它自己的程序集,您可以在注册表中查看:

      HKLM\System\CurrentControlSet\Services\[servicename]\ImagePath
      

      或者如果您的意思是找到自己的程序集路径:

      Assembly.GetExecutingAssembly().CodeBase;
      

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        相关资源
        最近更新 更多