Bagaimana saya bisa mendapatkan jalur ke layanan Windows yang dapat dieksekusi TANPA menggunakan sc qc?


15

Saya perlu menanyakan layanan windows agar jalurnya dapat dieksekusi melalui command prompt. Saya pikir cara saya akan melakukan ini adalah:, sc qc myServiceNametetapi ketika saya melakukan itu, saya mendapatkan kesalahan berikut:

[SC] QueryServiceConfig GAGAL 122:

Area data yang diteruskan ke panggilan sistem terlalu kecil.

[SC] GetServiceConfig membutuhkan 1094 byte

Saya pikir ini berarti bahwa perintah sc mengirim struktur data ke beberapa perpustakaan lain yang terlalu kecil untuk data yang perlu dikembalikan. Alih-alih SC mencoba ulang dengan baik dengan struktur data yang lebih besar (1094 bytes) itu meledak dan memberi saya pesan kesalahan yang jelek ini. Terima kasih, Micro $ oft.

Jadi apakah ada cara untuk mengatasi kesalahan ini? Saya hanya perlu path ke executable, tetapi akan menguraikannya dari beberapa teks lain jika diperlukan.

Jawaban:


20

Saya mengalami masalah ini juga ketika mencoba untuk mendapatkan detail dari layanan di mana jalan ke executable sangat panjang. Diskusi ini berisi solusi; Anda bisa meneruskan ukuran buffer sebagai argumen sc qc. Yaitu, jika Anda melakukannya:

sc qc <service name> 5000

kesalahan "area data yang diteruskan ke panggilan sistem terlalu kecil" hilang.


Juga lihat halaman SC QC MSDN:

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

dimana:

<BufferSize> Menentukan ukuran (dalam byte) buffer. Ukuran buffer default adalah 1.024 byte.


2
FYI, 2^13 = 8192adalah nilai maksimum untuk ukuran buffer.
nebffa

sc queryex type= service state= all | find /i "myServiceNamedaftar semua layanan tetapi sayangnya tidak ada jalur.
Shayan

13

Saya menemukan solusi yang bisa diterapkan:

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

Tentu saja ini membutuhkan beberapa penguraian, tetapi itu memberi saya path lengkap yang disediakan oleh kotak dialog services.msc.


10

Anda dapat melakukan ini di PowerShell dengan kueri WMI seperti ini:

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

Ini akan memberi Anda path lengkap, termasuk opsi seperti yang ditunjukkan di services.msc. Ganti saja winrmdalam contoh saya dengan layanan apa pun yang ingin Anda cari.

Permintaan di atas untuk winrmoutput harusC:\Windows\System32\svchost.exe -k NetworkService


Sayangnya, saya tidak dapat bergantung pada PowerShell karena XP tidak memilikinya secara default. Saya memerlukan dukungan untuk XP, server 2008, dan 7, semuanya tanpa menginstal perangkat lunak tambahan.
Jared

@ Jared itu terlalu buruk. Anda tidak dapat menjalankan ini dari satu mesin terhadap banyak mesin jarak jauh?
MDMarra

Tidak, ini sebenarnya sedikit skrip untuk dihapus di uninstaller untuk suatu aplikasi. Saya menemukan solusi yang berhasil dan menambahkan jawaban untuk itu.
Jared

4

Cobalah menggunakan wmicutilitas baris perintah. Berikut ini contoh layanan pada mesin saya yang disebut CrashPlanService.

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

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

Pada dasarnya wmic service <<YourService>> get PathName,.


1
Tidak cukup berhasil. Tetapi, di sisi lain, ini berfungsi: "layanan wmic | find" <servicename> "
djangofan

@ Djangofan output apa yang Anda dapatkan, dan dengan layanan yang mana? Mungkin Anda punya versi berbeda wmic(Saya menggunakan Windows 7 SP1)?
Ben Pilbrow

@ Ben Pilbrow Itu juga tidak berhasil bagi saya. wmic tidak mendapatkan nama path (hanya mengembalikan "PathName" dengan tidak ada pada baris berikut). Tidak yakin apakah ini karena ada banyak parameter yang tertanam di jalur sehingga sangat panjang.
Jared

bekerja untuk saya tetapi saya harus memproses hasilnya sedikit: ((layanan wmic SQLBrowser mendapatkan PathName) -match " "")[0].replace("" "," ")
katbyte

wmic servicebekerja dengan baik. Daftar semua layanan dengan jalurnya.
Shayan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.