2016-06-21 128 views
-1

我在c#中開發了一個Winform。我需要獲得我以前安裝的Windows服務的完整路徑。如何從c中獲取Windows服務安裝文件夾的完整路徑#

我能得到服務的一些性質,用下面的代碼:

  ServiceController ctl = new ServiceController("MyCustomService"); 

服務.exe文件所在的位置:

C:\Program Files (x86)\Manufacturer\MyCustomService 

,但我需要得到這條道路dinamically,從代碼。 .. 可能嗎?

在此先感謝...

+0

從服務代碼執行程序集「System.Reflection.Assembly.GetExecutingAssembly()。Location」的路徑。 如果你想從其他應用程序獲取路徑,你可以使用'Registry.GetValue()'從鍵HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ YourServiceName'獲取'ImagePath'的字符串值,或者圍繞'sc qc YourServiceName ' – vitalygolub

回答

0

服務控制器類不會提供窗口服務的完整路徑,你必須使用一個WMI或註冊表

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(); 
    } 

link提供的很好的例子如何使用註冊表查找服務的完整路徑

相關問題