2010-04-28 67 views
15

我必須在.Net Admin應用程序中獲取Windows服務的絕對路徑。我正在使用.Net的ServiceController,如下所示。如何使用.net獲取windows服務的phyiscal路徑?

ServiceController serviceController = new ServiceController(serviceName); 

但我沒有看到任何屬性在這裏獲得服務的.exe的絕對路徑。無論如何,以編程方式獲得這個。

回答

16

你可以得到這個使用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; 
    } 
} 
5

如果它沒有自己的組件,你可以看看在註冊表中:

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

或者,如果你的意思是找到自己組裝的路徑:

Assembly.GetExecutingAssembly().CodeBase; 
相關問題