Muszę zapytać usługę systemu Windows o ścieżkę do jej pliku wykonywalnego za pomocą wiersza polecenia. Myślę, że zrobiłbym to tak: sc qc myServiceName
ale kiedy to robię, pojawia się następujący błąd:
[SC] QueryServiceConfig FAILED 122:
Obszar danych przekazywany do wywołania systemowego jest zbyt mały.
[SC] GetServiceConfig potrzebuje 1094 bajtów
Myślę, że oznacza to, że polecenie sc wysyła strukturę danych do innej biblioteki, która jest zbyt mała, aby dane mogły zostać zwrócone. Zamiast SC ładnie ponawia próbę z większą strukturą danych (1094 bajtów) bombarduje i daje mi ten brzydki komunikat o błędzie. Dzięki Micro $ często.
Czy istnieje sposób obejścia tego błędu? Potrzebuję tylko ścieżki do pliku wykonywalnego, ale w razie potrzeby przeanalizuję go z innego tekstu.
2^13 = 8192
to maksymalna wartość rozmiaru bufora.sc queryex type= service state= all | find /i "myServiceName
zawiera listę wszystkich usług, ale niestety nie ma ścieżki.Znalazłem wykonalne rozwiązanie:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
Oczywiście wymaga to analizy, ale daje mi pełną ścieżkę, którą zapewnia okno dialogowe services.msc.
źródło
Możesz to zrobić w PowerShell za pomocą zapytania WMI takiego jak to:
To da ci pełną ścieżkę, w tym opcje pokazane w services.msc. Po prostu zamień
winrm
w moim przykładzie dowolną usługę, której chcesz szukać.Powyższe zapytanie dla
winrm
powinno dać wynikC:\Windows\System32\svchost.exe -k NetworkService
źródło
Wypróbuj za pomocą
wmic
narzędzia wiersza polecenia. Oto przykład usługi na moim komputerze o nazwieCrashPlanService
.Zasadniczo
wmic service <<YourService>> get PathName
.źródło
wmic
(korzystam z Windows 7 SP1)?"")[0].replace("
" "," ")wmic service
działa świetnie. Wyświetla listę wszystkich usług wraz z ich ścieżkami.