Ich muss einen Windows-Dienst über die Eingabeaufforderung nach dem Pfad zur ausführbaren Datei abfragen. Ich denke, wie ich das machen würde , ist:, sc qc myServiceName
aber wenn ich das mache, bekomme ich den folgenden Fehler:
[SC] QueryServiceConfig FEHLGESCHLAGEN 122:
Der an einen Systemaufruf übergebene Datenbereich ist zu klein.
[SC] GetServiceConfig benötigt 1094 Bytes
Ich denke, dies bedeutet, dass der Befehl sc eine Datenstruktur an eine andere Bibliothek sendet, die zu klein für die Daten ist, die zurückgegeben werden müssen. Anstatt SC mit einer größeren Datenstruktur (1094 Bytes) erneut zu versuchen, bombardiert es und gibt mir diese hässliche Fehlermeldung. Vielen Dank Micro $ oft.
Gibt es also eine Möglichkeit, diesen Fehler zu umgehen? Ich brauche nur den Pfad zur ausführbaren Datei, werde ihn aber bei Bedarf aus einem anderen Text analysieren.
2^13 = 8192
ist der Maximalwert für die Puffergröße.sc queryex type= service state= all | find /i "myServiceName
listet alle dienste aber leider keinen pfad auf.Ich habe eine praktikable Lösung gefunden:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Natürlich muss dies analysiert werden, aber es gibt mir den vollständigen Pfad, den das Dialogfeld services.msc bereitstellt.
quelle
Sie können dies in PowerShell mit einer WMI-Abfrage wie der folgenden tun:
Dadurch erhalten Sie den vollständigen Pfad, einschließlich der Optionen, die in services.msc angezeigt werden. Ersetzen Sie
winrm
in meinem Beispiel einfach den gewünschten Dienst.Die obige Abfrage für
winrm
sollte ausgegeben werdenC:\Windows\System32\svchost.exe -k NetworkService
quelle
Versuchen Sie es mit dem
wmic
Befehlszeilenprogramm. Hier ist ein Beispiel für einen Dienst, der auf meinem Computer aufgerufen wirdCrashPlanService
.Grundsätzlich
wmic service <<YourService>> get PathName
.quelle
wmic
(ich bin auf Windows 7 SP1)?"")[0].replace("
"", "")wmic service
funktioniert super. Listet alle Services mit ihren Pfaden auf.