मैं sc qc का उपयोग किए बिना Windows सेवा निष्पादन योग्य मार्ग कैसे प्राप्त कर सकता हूं?


15

मुझे कमांड प्रॉम्प्ट के माध्यम से निष्पादन योग्य पथ के लिए एक विंडोज़ सेवा को क्वेरी करने की आवश्यकता है। मुझे लगता है कि जिस तरह से मैं यह करूंगा वह यह है: sc qc myServiceNameलेकिन जब मैं ऐसा करता हूं, मुझे निम्नलिखित त्रुटि मिलती है:

[SC] QueryServiceConfig 122 में विफल:

सिस्टम कॉल में दिया गया डेटा क्षेत्र बहुत छोटा है।

[SC] GetServiceConfig को 1094 बाइट्स की जरूरत है

मुझे लगता है कि इसका मतलब यह है कि sc कमांड कुछ अन्य लाइब्रेरी को डेटा संरचना भेज रहा है जो डेटा के लिए बहुत छोटा है जिसे वापस करने की आवश्यकता है। एससी के बजाय एक बड़ी डेटा संरचना (1094 बाइट्स) के साथ पुन: प्रयास करने से यह बम हो जाता है और मुझे यह बदसूरत त्रुटि संदेश देता है। धन्यवाद माइक्रो $ टीटी।

तो क्या इस त्रुटि के आसपास काम करने का एक तरीका है? मुझे बस निष्पादन योग्य पथ की आवश्यकता है, लेकिन यदि आवश्यक हो तो इसे किसी अन्य पाठ से बाहर कर देगा।

जवाबों:


20

मुझे इस समस्या का सामना करना पड़ा जब एक सेवा का विवरण प्राप्त करने की कोशिश की गई जहां निष्पादन योग्य का रास्ता बहुत लंबा था। इस चर्चा में वर्कअराउंड शामिल है; आप एक तर्क के रूप में एक बफर आकार पारित कर सकते हैं sc qc। यदि आप ऐसा करते हैं:

sc qc <service name> 5000

"सिस्टम कॉल में दिया गया डेटा क्षेत्र बहुत छोटा है" त्रुटि दूर हो जाती है।


इसके अलावा SC QC MSDN पृष्ठ देखें:

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

कहाँ पे:

बफर के आकार (बाइट्स में) को निर्दिष्ट करता है। डिफ़ॉल्ट बफ़र का आकार 1,024 बाइट्स है।


2
FYI करें, 2^13 = 8192बफर आकार के लिए अधिकतम मूल्य है।
नेफ्फा

sc queryex type= service state= all | find /i "myServiceNameसभी सेवाओं को सूचीबद्ध करता है लेकिन दुर्भाग्य से कोई रास्ता नहीं है।
शायन

13

मुझे एक व्यावहारिक हल मिला:

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

बेशक इसके लिए कुछ पार्सिंग की जरूरत है, लेकिन यह मुझे पूर्ण पथ देता है जो कि services.msc डायलॉग बॉक्स प्रदान करता है।


10

आप इसे इस तरह से WMI क्वेरी के साथ PowerShell में कर सकते हैं:

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

यह आपको पूरा रास्ता देगा, जिसमें विकल्प भी शामिल हैं जैसे कि उन्हें services.msc में दिखाया गया है। जिस winrmभी सेवा को आप खोजना चाहते हैं, उसके साथ बस मेरे उदाहरण में बदलें ।

winrmआउटपुट के लिए उपरोक्त क्वेरी चाहिएC:\Windows\System32\svchost.exe -k NetworkService


दुर्भाग्य से, मैं शक्तियां पर निर्भर नहीं कर सकता क्योंकि XP ​​में डिफ़ॉल्ट रूप से नहीं है। मुझे XP, सर्वर 2008 और 7 के लिए समर्थन की आवश्यकता है, बिना किसी अतिरिक्त सॉफ़्टवेयर को स्थापित किए।
जारेड

@ बहुत बुरा लगा। आप दूरस्थ मशीनों के एक समूह के खिलाफ एक मशीन से इसे चलाने में असमर्थ हैं?
एमडीएमरा

नहीं यह वास्तव में एक आवेदन के लिए अनइंस्टालर में जाने के लिए स्क्रिप्ट का एक सा है। मैंने एक समाधान निकाला जो काम करता है और हालांकि इसके लिए एक उत्तर जोड़ा गया है।
जारेड

4

wmicकमांड लाइन उपयोगिता का उपयोग करके इसे आज़माएं । यहाँ मेरी मशीन पर एक सेवा का उदाहरण दिया गया है CrashPlanService

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

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

मूल रूप से, wmic service <<YourService>> get PathName


1
काफी काम नहीं करता है। लेकिन, दूसरी ओर, यह काम करता है: "विकी सेवा।" <servicename> "खोजें
djangofan

@djangofan आपको क्या आउटपुट मिलता है, और किस सेवा के साथ? शायद आपको एक अलग संस्करण मिल गया है wmic(मैं विंडोज 7 SP1 पर हूं)?
बेन पिल्ब्रो

@ बीन पलब्रो कि मेरे लिए भी काम नहीं किया। विकल को पथ नाम नहीं मिल रहा है (केवल "लाइननाम" जो निम्न पंक्ति में कुछ भी नहीं है)। यकीन नहीं होता है क्योंकि यह है क्योंकि वहाँ बहुत सारे पैरामीटर हैं जो इसे बहुत लंबा बनाते हैं।
Jared

मेरे लिए काम किया, लेकिन मुझे इसका परिणाम थोड़ा कम करना पड़ा: ((wmic service SQLBrowser get PathName "")[0].replace(")
katbyte

wmic serviceबहुत अच्छा काम करता है। अपने रास्तों के साथ सभी सेवाओं को सूचीबद्ध करता है।
शायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.