如何获取服务可执行文件路径

时间:2009-06-25 17:03:36

标签: .net windows-services

有没有获得正在运行的Windows服务的可执行文件路径而不需要.Net中的管理员执行级别权限? (不会导致UAC获得用户的确认)

3 个答案:

答案 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");