Necesito consultar un servicio de Windows para conocer la ruta a su ejecutable a través del símbolo del sistema. Pienso de la manera que yoharíahacer esto es: sc qc myServiceName
, pero cuando lo hago, aparece el siguiente error:
[SC] QueryServiceConfig FALLÓ 122:
El área de datos pasada a una llamada al 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 alguna 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), falla y me da este feo mensaje de error. Gracias Micro$oft.
Entonces, ¿hay alguna forma de solucionar este error? Solo necesito la ruta al ejecutable, pero la analizaré a partir de otro texto si es necesario.
Respuesta1
También encontré este problema al intentar obtener los detalles de un servicio donde la ruta al ejecutable era muy larga.Esta discusióncontiene una solución alternativa; puede pasar un tamaño de búfer como argumento a sc qc
. Es decir, si lo haces:
sc qc <service name> 5000
El error "el área de datos pasada a una llamada al sistema es demasiado pequeña" desaparece.
Ver tambiéncontrol de calidad del SCPágina de MSDN:
sc [<ServerName>] qc [<ServiceName>] [<BufferSize>]
dónde:
<BufferSize> Especifica el tamaño (en bytes) del búfer. El tamaño de búfer predeterminado es 1024 bytes.
Respuesta2
Encontré una solución viable:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Por supuesto, esto necesita un poco de análisis, pero me proporciona la ruta completa que proporciona el cuadro de diálogo services.msc.
Respuesta3
Puedes hacer esto en PowerShell con una consulta WMI como esta:
$service = get-wmiobject -query 'select * from win32_service where name="winrm"'; echo $service.pathname
Esto le proporcionará 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 winrm
debería generarC:\Windows\System32\svchost.exe -k NetworkService
Respuesta4
A partir de PowerShell 7:
(Get-Service theServiceName).BinaryPathName