Search code examples
.netwindows-servicesadministrationservicecontroller

how to get phyiscal path of windows service using .net?


I have to get the absolute path of a windows service in a .Net Admin application. I am using ServiceController of .Net as shown below.

ServiceController serviceController = new  ServiceController(serviceName);

But I don't see any property here to get the absolute path of the .exe of the service. Is there anyway to get this programmatically.


Solution

  • You can get this using WMI, which requires an assembly reference to 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;
        }
    }