如何获取服务可执行文件路径
答
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
答
尝试从注册表获取:
using Microsoft.Win32;
.
.
.
RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey(@"System\CurrentControlSet\Services\SERVICE_NAME");
string servicePath = hklm.GetValue("ImagePath");
答
下面是一个使用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());
}
确保包裹ManagementObjectSearcher
在using
因为它是一种资源,需要妥善处置。
我不确定这是否需要提升权限才能运行,但确实需要在机器上安装并运行WMI。要检查WMI是否正在运行,请打开服务管理单元并查找Windows Management Instrumentation。您也可以通过从命令行运行net start winmgmt
来启用它。
阅读表单注册表需要管理员执行级别的特权。不是吗? – mrtaikandi 2009-06-25 18:05:21
尽管这不是获取这些信息的理想方式,但我已经回到了上述类似的位置,但只做了一些修改。需要进行测试以了解UAC提示,但几乎所有用户都可以毫无阻碍地查询注册表的这一部分。 – Saxar 2015-07-18 02:25:45