2010-04-28 4 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; 
관련 문제