2010-04-28 7 views
15

Muszę uzyskać bezwzględną ścieżkę usługi windowsowej w aplikacji .Net Admin. Korzystam z ServiceController .Net, jak pokazano poniżej.jak uzyskać ścieżkę phyiscal usługi Windows za pomocą .net?

ServiceController serviceController = new ServiceController(serviceName); 

Ale nie widzę tu żadnej własności, aby uzyskać absolutną ścieżkę .exe usługi. Czy jest tak, aby uzyskać to programowo.

Odpowiedz

16

ten można uzyskać przy użyciu WMI, który wymaga odniesienia do zespołu 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

Jeśli to nie jego własny zespół można patrzeć w rejestrze pod adresem:

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

Lub jeśli masz na myśli odnaleźć drogę swojego własnego zgromadzenia:

Assembly.GetExecutingAssembly().CodeBase; 
Powiązane problemy