Eu preciso consultar um serviço do Windows para o caminho para ele é executável através do prompt de comando. Eu acho que a maneira como faria isso é:, sc qc myServiceName
mas quando faço isso, recebo o seguinte erro:
[SC] QueryServiceConfig FAILED 122:
A área de dados passada para uma chamada do sistema é muito pequena.
[SC] GetServiceConfig precisa de 1094 bytes
Eu acho que isso significa que o comando sc está enviando uma estrutura de dados para alguma outra biblioteca que é muito pequena para os dados que precisam ser retornados. Em vez de o SC tentar novamente com uma estrutura de dados maior (1094 bytes), ele dispara e me dá essa mensagem de erro feia. Obrigado Micro $ oft.
Portanto, existe uma maneira de contornar esse erro? Eu só preciso do caminho para o executável, mas o analisarei de outro texto, se necessário.
2^13 = 8192
é o valor máximo para o tamanho do buffer.sc queryex type= service state= all | find /i "myServiceName
lista todos os serviços, mas infelizmente nenhum caminho.Encontrei uma solução viável:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
É claro que isso precisa de uma análise, mas fornece o caminho completo fornecido pela caixa de diálogo services.msc.
fonte
Você pode fazer isso no PowerShell com uma consulta WMI como esta:
Isso fornecerá o caminho completo, incluindo as opções mostradas em services.msc. Basta substituir
winrm
no meu exemplo por qualquer serviço que você deseja procurar.A consulta acima para
winrm
deve produzirC:\Windows\System32\svchost.exe -k NetworkService
fonte
Experimente usando o
wmic
utilitário de linha de comando. Aqui está um exemplo de um serviço na minha máquina chamadoCrashPlanService
.Basicamente
wmic service <<YourService>> get PathName
.fonte
wmic
(eu estou no Windows 7 SP1)?"")[0].replace("
'', '')wmic service
funciona bem. Lista todos os serviços com seus caminhos.