2009-06-25 79 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来启用它。

相关问题