Come posso ottenere il percorso di un eseguibile del servizio Windows SENZA usare sc qc?


15

Ho bisogno di interrogare un servizio Windows per il percorso del suo eseguibile tramite il prompt dei comandi. Penso che il modo in cui lo farei è:, sc qc myServiceNamema quando lo faccio, ottengo il seguente errore:

[SC] QueryServiceConfig FAILED 122:

L'area dati passata a una chiamata di sistema è troppo piccola.

[SC] GetServiceConfig richiede 1094 byte

Penso che ciò significhi che il comando sc sta inviando una struttura di dati ad un'altra libreria troppo piccola per i dati che devono essere restituiti. Invece di provare bene SC con una struttura dati più grande (1094 byte), esplode e mi dà questo brutto messaggio di errore. Grazie Micro $ oft.

Quindi c'è un modo per aggirare questo errore? Ho solo bisogno del percorso dell'eseguibile, ma lo analizzerò da qualche altro testo, se necessario.

Risposte:


20

Ho riscontrato questo problema anche quando ho cercato di ottenere i dettagli di un servizio in cui il percorso dell'eseguibile era molto lungo. Questa discussione contiene una soluzione alternativa; puoi passare una dimensione del buffer come argomento a sc qc. Cioè, se lo fai:

sc qc <service name> 5000

l'errore "l'area dati passata a una chiamata di sistema è troppo piccola" scompare.


Vedi anche la pagina MSDN SC QC :

sc [<ServerName>] qc [<ServiceName>] [<BufferSize>]

dove:

<BufferSize> Specifica la dimensione (in byte) del buffer. La dimensione del buffer predefinita è 1.024 byte.


2
Cordiali saluti, 2^13 = 8192è il valore massimo per la dimensione del buffer.
Nebffa,

sc queryex type= service state= all | find /i "myServiceNameelenca tutti i servizi ma sfortunatamente nessun percorso.
Shayan,

13

Ho trovato una soluzione praticabile:

reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"

Naturalmente questo richiede un po 'di analisi, ma mi dà il percorso completo fornito dalla finestra di dialogo services.msc.


10

Puoi farlo in PowerShell con una query WMI come questa:

$service = get-wmiobject -query 'select * from win32_service where name="winrm"'; echo $service.pathname

Questo ti darà il percorso completo, comprese le opzioni come sono mostrate in services.msc. Sostituisci winrmnel mio esempio con qualsiasi servizio tu voglia cercare.

L' winrmoutput della query precedente dovrebbeC:\Windows\System32\svchost.exe -k NetworkService


Sfortunatamente, non posso dipendere da PowerShell poiché XP non lo ha di default. Ho bisogno del supporto per XP, server 2008 e 7, il tutto senza installare alcun software aggiuntivo.
Jared,

@Jared è troppo male. Non riesci a eseguirlo da una singola macchina contro un gruppo di macchine remote?
MDMarra,

No, questo è in realtà un po 'di script da utilizzare nel programma di disinstallazione per un'applicazione. Ho trovato una soluzione che funziona e ho aggiunto una risposta per questo però.
Jared,

4

Provalo utilizzando l' wmicutilità della riga di comando. Ecco un esempio di un servizio sulla mia macchina chiamato CrashPlanService.

C:\Users\Ben>wmic service CrashPlanService get PathName

PathName
"C:\Program Files\CrashPlan\CrashPlanService.exe"

Fondamentalmente, wmic service <<YourService>> get PathName.


1
Non funziona abbastanza. D'altra parte, questo funziona: "servizio wmic | trova" <servicename> "
djangofan

@djangofan quale output ottieni e con quale servizio? Forse hai una versione diversa di wmic(Sono su Windows 7 SP1)?
Ben Pilbrow,

@Ben Pilbrow Anche per me non ha funzionato. wmic non sta ottenendo il nome del percorso (restituisce semplicemente "PathName" senza nulla nella riga seguente). Non sono sicuro se questo è perché ci sono molti parametri incorporati nel percorso che lo rendono molto lungo.
Jared,

ha funzionato per me, ma ho dovuto elaborare un po 'il risultato: ((servizio wmic SQLBrowser get PathName) -match " "")[0].replace("" "," ")
katbyte

wmic servicefunziona alla grande. Elenca tutti i servizi con i loro percorsi.
Shayan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.