Necesito consultar a un servicio de Windows la ruta a su ejecutable a través del símbolo del sistema. Creo que la forma en que haría esto es: sc qc myServiceName
pero cuando hago eso, aparece el siguiente error:
[SC] QueryServiceConfig FALLÓ 122:
El área de datos pasada a una llamada del sistema es demasiado pequeña.
[SC] GetServiceConfig necesita 1094 bytes
Creo que esto significa que el comando sc está enviando una estructura de datos a otra biblioteca que es demasiado pequeña para los datos que deben devolverse. En lugar de que SC vuelva a intentarlo con una estructura de datos más grande (1094 bytes), bombardea y me da este feo mensaje de error. Gracias Micro $ oft.
Entonces, ¿hay alguna manera de evitar este error? Solo necesito la ruta al ejecutable, pero la analizaré de otro texto si es necesario.
2^13 = 8192
es el valor máximo para el tamaño del búfer.sc queryex type= service state= all | find /i "myServiceName
enumera todos los servicios pero desafortunadamente no hay ruta.Encontré una solución viable:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Por supuesto, esto necesita algún análisis, pero me da la ruta completa que proporciona el cuadro de diálogo services.msc.
fuente
Puede hacer esto en PowerShell con una consulta WMI como esta:
Esto le dará la ruta completa, incluidas las opciones que se muestran en services.msc. Simplemente reemplace
winrm
en mi ejemplo con cualquier servicio que desee buscar.La consulta anterior para
winrm
debería salirC:\Windows\System32\svchost.exe -k NetworkService
fuente
Pruébelo con la
wmic
utilidad de línea de comandos. Aquí hay un ejemplo de un servicio en mi máquina llamadoCrashPlanService
.Básicamente,
wmic service <<YourService>> get PathName
.fuente
wmic
(Estoy en Windows 7 SP1)?"")[0].replace("
" "," ")wmic service
Funciona genial. Enumera todos los servicios con sus rutas.