Sc qc kullanarak OLMADAN bir Windows hizmeti yürütülebilir yolunu nasıl alabilirim?


15

Komut istemi aracılığıyla yürütülebilir yolu için bir Windows hizmeti sorgulamak gerekiyor. Ben yolu düşünmek istiyorum bunu geçerli: sc qc myServiceName, ama bunu yaparken, aşağıdaki hatayı alıyorum:

[SC] QueryServiceConfig FAILED 122:

Sistem çağrısına aktarılan veri alanı çok küçük.

[SC] GetServiceConfig için 1094 bayt gerekiyor

Bu sc komutu döndürülmesi gereken veriler için çok küçük diğer kütüphaneye bir veri yapısı gönderdiğini düşünüyorum. SC yerine daha büyük bir veri yapısı (1094 bayt) ile yeniden denemek yerine bombalar ve bana bu çirkin hata mesajını verir. Teşekkürler Micro $ oft.

Bu hatayı geçici olarak çözmenin bir yolu var mı? Sadece yürütülebilir yol gerekir, ancak gerekirse diğer bazı metin ayrıştırmak olacaktır.

Yanıtlar:


20

Yürütülebilir dosyanın yolu çok uzun olduğu bir hizmetin ayrıntılarını almaya çalışırken de bu sorunla karşılaştım. Bu tartışma bir geçici çözüm içerir; bir arabellek boyutunu argüman olarak iletebilirsiniz sc qc. Yani, eğer yaparsanız:

sc qc <service name> 5000

"bir sistem çağrısına aktarılan veri alanı çok küçük" hatası gider.


Ayrıca SC QC MSDN sayfasına bakın:

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

nerede:

<BufferSize> Arabelleğin boyutunu (bayt cinsinden) belirtir. Varsayılan arabellek boyutu 1.024 bayttır.


2
FYI, 2^13 = 8192arabellek boyutu için maksimum değerdir.
nebffa

sc queryex type= service state= all | find /i "myServiceNametüm hizmetleri listeler ama ne yazık ki yolu yok.
Shayan

13

Uygulanabilir bir çözüm buldum:

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

Tabii ki bunun biraz ayrıştırılması gerekiyor, ancak bana services.msc iletişim kutusunun sağladığı tam yolu veriyor.


10

Bunu PowerShell'de şöyle bir WMI sorgusu ile yapabilirsiniz:

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

Bu, services.msc dosyasında gösterilen seçenekler de dahil olmak üzere size tam yolu verecektir. Sadece winrmbenim örneğimde aramak istediğiniz hizmeti kullanın.

Yukarıdaki winrmçıktı için sorguC:\Windows\System32\svchost.exe -k NetworkService


Ne yazık ki, XP varsayılan olarak sahip olmadığından powershell'e güvenemiyorum. Ek bir yazılım yüklemeden XP, server 2008 ve 7 için desteğe ihtiyacım var.
Jared

@Çok çok kötü. Bunu tek bir makineden bir grup uzak makineye karşı çalıştıramaz mısınız?
MDMarra

Hayır, bu aslında bir uygulama için kaldırıcıya gitmek için biraz komut dosyasıdır. İşe yarayan bir çözüm buldum ve buna bir cevap ekledim.
Jared

4

wmicKomut satırı yardımcı programını kullanarak deneyin . İşte makinemde adı verilen bir hizmet örneği CrashPlanService.

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

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

Temel olarak wmic service <<YourService>> get PathName,.


1
Pek işe yaramıyor. Ancak, öte yandan, bu çalışır: "wmic service | find" <servicename> "
djangofan

@djangofan hangi çıktıyı alıyorsunuz ve hangi hizmetle? Belki farklı bir sürümüne sahipsiniz wmic(Windows 7 SP1'deyim)?
Ben Pilbrow

@Ben Pilbrow Bu benim için de işe yaramadı. wmic yol adını almıyor (aşağıdaki satırda hiçbir şey olmadan "PathName" i döndürüyor). Bunun yol üzerinde gömülü çok uzun parametreler olduğundan emin değilim.
Jared

benim için çalıştı ama biraz sonuç işlemek zorunda kaldı: ((wmic hizmet SQLBrowser PathName olsun) -match " "")[0].replace("" "," ")
katbyte

wmic serviceharika çalışıyor. Tüm hizmetleri yollarıyla listeler.
Shayan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.