有没有获得正在运行的Windows服务的可执行文件路径而不需要.Net中的管理员执行级别权限? (不会导致UAC获得用户的确认)
答案 0 :(得分: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());
}
确保将ManagementObjectSearcher
包装在using
块中,因为它是一种资源,需要妥善处理。
我不确定这是否需要提升权限才能运行,但它确实需要在计算机上安装并运行WMI。要检查WMI是否正在运行,请打开服务管理单元并查找Windows Management Instrumentation。您也可以通过从命令行运行net start winmgmt
来启用它。
答案 1 :(得分:4)
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
答案 2 :(得分:2)
尝试从注册表中获取:
using Microsoft.Win32;
.
.
.
RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey(@"System\CurrentControlSet\Services\SERVICE_NAME");
string servicePath = hklm.GetValue("ImagePath");