Je dois interroger un service Windows pour le chemin d'accès à son exécutable via l'invite de commande. Je pense que la façon dont je ferais ceci est:, sc qc myServiceName
mais quand je le fais, j'obtiens l'erreur suivante:
[SC] Échec de QueryServiceConfig 122:
La zone de données transmise à un appel système est trop petite.
[SC] GetServiceConfig a besoin de 1094 octets
Je pense que cela signifie que la commande sc envoie une structure de données à une autre bibliothèque qui est trop petite pour les données qui doivent être retournées. Au lieu de réessayer gentiment avec une structure de données plus grande (1094 octets), il bombarde et me donne ce message d'erreur laid. Merci Micro $ oft.
Existe-t-il un moyen de contourner cette erreur? J'ai juste besoin du chemin vers l'exécutable, mais je vais l'analyser à partir d'un autre texte si nécessaire.
2^13 = 8192
est la valeur maximale de la taille du tampon.sc queryex type= service state= all | find /i "myServiceName
liste tous les services mais malheureusement aucun chemin.J'ai trouvé une solution viable:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Bien sûr, cela nécessite une analyse, mais cela me donne le chemin complet fourni par la boîte de dialogue services.msc.
la source
Vous pouvez le faire dans PowerShell avec une requête WMI comme celle-ci:
Cela vous donnera le chemin complet, y compris les options telles qu'elles sont affichées dans services.msc. Remplacez simplement
winrm
dans mon exemple le service que vous souhaitez rechercher.La requête ci-dessus pour
winrm
devrait sortirC:\Windows\System32\svchost.exe -k NetworkService
la source
Essayez-le à l'aide de l'
wmic
utilitaire de ligne de commande. Voici un exemple de service appelé sur ma machineCrashPlanService
.En gros,
wmic service <<YourService>> get PathName
.la source
wmic
(je suis sur Windows 7 SP1)?"")[0].replace("
" "," ")wmic service
fonctionne très bien. Répertorie tous les services avec leurs chemins d'accès.