Мне нужно запросить службу Windows для пути к ее исполняемому через командную строку. Я думаю, что я бы сделал это так:, sc qc myServiceName
но когда я это сделаю, я получу следующую ошибку:
[SC] QueryServiceConfig FAILED 122:
Область данных, переданная системному вызову, слишком мала.
[SC] GetServiceConfig требуется 1094 байта
Я думаю, это означает, что команда sc отправляет структуру данных в другую библиотеку, которая слишком мала для данных, которые необходимо вернуть. Вместо того, чтобы SC аккуратно повторял попытку с большей структурой данных (1094 байта), он взрывается и выдает мне это ужасное сообщение об ошибке. Спасибо Micro $ oft.
Так есть ли способ обойти эту ошибку? Мне просто нужен путь к исполняемому файлу, но при необходимости я буду анализировать его из некоторого другого текста.
2^13 = 8192
это максимальное значение для размера буфера.sc queryex type= service state= all | find /i "myServiceName
перечисляет все услуги, но, к сожалению, нет пути.Я нашел работоспособное решение:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Конечно, это требует некоторого разбора, но он дает мне полный путь, который предоставляет диалоговое окно services.msc.
источник
Вы можете сделать это в PowerShell с помощью запроса WMI, например:
Это даст вам полный путь, включая параметры, как они показаны в services.msc. Просто замените
winrm
в моем примере любую службу, которую вы хотите найти.Приведенный выше запрос
winrm
должен выводитьC:\Windows\System32\svchost.exe -k NetworkService
источник
Попробуйте это с помощью
wmic
утилиты командной строки. Вот пример службы на моей машине под названиемCrashPlanService
.В основном
wmic service <<YourService>> get PathName
.источник
wmic
(я на Windows 7 SP1)?"")[0].replace("
" "," ")wmic service
прекрасно работает. Перечисляет все службы с их путями.