Как получить путь к исполняемому файлу сервиса - PullRequest
1 голос
/ 25 июня 2009

Есть ли способ получить путь к исполняемому файлу работающей службы Windows, не требуя привилегий администратора на уровне выполнения в .Net? (Не заставляя UAC получить подтверждение пользователя)

Ответы [ 3 ]

8 голосов
/ 27 января 2012

Вот возможное решение с использованием 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. Вы также можете включить его, запустив net start winmgmt из командной строки.

4 голосов
/ 28 января 2012
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
2 голосов
/ 25 июня 2009

Попробуйте получить из реестра:

using Microsoft.Win32;
.
.
.

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

string servicePath = hklm.GetValue("ImagePath");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...