2010-04-28 13 views
15

Ich muss den absoluten Pfad eines Windows-Dienstes in einer .Net-Admin-Anwendung abrufen. Ich verwende ServiceController von .Net wie unten gezeigt.Wie bekomme ich den phyiscal Pfad von Windows Service mit .net?

Aber ich sehe keine Eigenschaft hier, um den absoluten Pfad der .exe des Dienstes zu erhalten. Gibt es sowieso, um dies programmatisch zu bekommen.

Antwort

16

Sie können diese mithilfe von WMI erhalten, die erfordert einen Assemblierungsverweis auf 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; 
    } 
} 
5

Wenn es seine eigene Montage nicht, können Sie in der Registrierung buchen:

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

Oder wenn Sie Ihren eigenen Assembly Weg bedeuten finden:

Assembly.GetExecutingAssembly().CodeBase;