Как получить путь к исполняемому файлу службы

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


person mrtaikandi    schedule 25.06.2009    source источник


Ответы (2)


Вот возможное решение с использованием 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 из командной строки.

person Paccc    schedule 27.01.2012
comment
Я получаю исключение Invalid query на mos.Get() - person Lost_In_Library; 08.04.2013
comment
@LostInLib Мои извинения ... Я забыл заключить имя службы в одинарные кавычки. Я обновил свой ответ, чтобы отразить это изменение. :) - person Paccc; 08.04.2013

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

using Microsoft.Win32;
.
.
.

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

string servicePath = hklm.GetValue("ImagePath");
person Zanoni    schedule 25.06.2009
comment
Для чтения формы реестра требуется привилегированный уровень исполнения администратора. Не так ли? - person mrtaikandi; 25.06.2009
comment
Хотя это не идеальный способ получить эту информацию, я вернулся к нему, как и выше, но с несколькими изменениями, которые я только что сделал. Требуется тестирование, чтобы узнать об этом в приглашении UAC, но я полагаю, что почти любой пользователь может беспрепятственно запросить эту часть реестра. - person Saxar; 18.07.2015