2009-06-25 78 views

回答

4
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
1

嘗試從註冊表獲取:

using Microsoft.Win32; 
. 
. 
. 

RegistryKey hklm = Registry.LocalMachine; 
hklm = hklm.OpenSubKey(@"System\CurrentControlSet\Services\SERVICE_NAME"); 

string servicePath = hklm.GetValue("ImagePath"); 
+0

閱讀表單註冊表需要管理員執行級別的特權。不是嗎? – mrtaikandi 2009-06-25 18:05:21

+0

儘管這不是獲取這些信息的理想方式,但我已經回到了上述類似的位置,但只做了一些修改。需要進行測試以瞭解UAC提示,但幾乎所有用戶都可以毫無阻礙地查詢註冊表的這一部分。 – Saxar 2015-07-18 02:25:45

8

下面是一個使用WMI一個可能的解決方案:

using System.Management; 


String query = String.Format("SELECT PathName FROM Win32_Service WHERE Name = '{0}'", serviceName); 

using (ManagementObjectSearcher mos = new ManagementObjectSearcher(query)) { 
    foreach(ManagementObject mo in mos.Get()) 
     Console.WriteLine(mo["PathName"].ToString()); 
} 

確保包裹ManagementObjectSearcherusing因爲它是一種資源,需要妥善處置。

我不確定這是否需要提升權限才能運行,但確實需要在機器上安裝並運行WMI。要檢查WMI是否正在運行,請打開服務管理單元並查找Windows Management Instrumentation。您也可以通過從命令行運行net start winmgmt來啓用它。

相關問題