2009-12-16 19 views
10

आप कैसे जांचेंगे कि एक WIN32 सेवा मौजूद है या नहीं, और यदि ऐसा है, तो कुछ ऑपरेशन करें?यदि सेवा मौजूद है

+0

क्या सेवा क्या सिस्टम पर? कृपया अधिक संदर्भ प्रदान करें। –

+0

यह एक स्थानीय सेवा होगी जिसे एबीसी नाम दिया जाता है। दृश्य सेवा स्टूडियो में पोस्ट बिल्ड इवेंट के हिस्से के रूप में मौजूद होने पर मुझे सेवा को पुनरारंभ करने की आवश्यकता है। वीएस पोस्ट बिल्ड इवेंट मूल रूप से बैच/डॉस (??) कमांड हैं। – Burt

उत्तर

10

मेरे सिर के ऊपर से, आप "नेट" कमांड का उपयोग करके, "नेट" कमांड का उपयोग करके, "नेट" कमांड का उपयोग करके, एक विशिष्ट सेवा चल रही है या नहीं, यह जांच सकते हैं कि परिणाम "पाइप" में पाइप कर रहा है। कुछ की तरह कुछ जांच करेगा कि कोई सेवा चल रही है या नहीं, और यदि ऐसा है तो इसे रोक दें। इसके बाद आप अगर यह पहले से ही चल रहा था या नहीं के बारे में चिंता किए बिना इसे शुरू कर सकते हैं:

net start | find "SomeService" 
if ERRORLEVEL 1 net stop "SomeService" 
net start "SomeService" 

आप findstr उपयोग कर रहे हैं खोज करने के लिए, के रूप में अन्य उत्तर में से कुछ का सुझाव दिया है, तो आप ERRORLEVEL बराबर के लिए जाँच करेगा 0 (शून्य) के लिए ... आप के लिए देख रहे हैं यह तो आप स्ट्रिंग पाया है है:

net start | findstr "SomeService" 
if ERRORLEVEL 0 net stop "SomeService" 
net start "SomeService" 

अनिवार्य रूप से सबसे डॉस कमांड ERRORLEVEL सेट हो जाएगा, अगर एक खोज की तरह कुछ सफल रहा है आप की जाँच करने के लिए अनुमति देता है।

18

आप डॉस में ऐसा नहीं कर सकते, क्योंकि डॉस विंडोज नहीं है और इसमें "सेवा" की अवधारणा भी नहीं है।

एक Windows बैच में फ़ाइल सेवाओं को खोजने के लिए sc आदेश का उपयोग कर सकते हैं:

sc query | findstr SERVICE_NAME 

यह सभी सेवाओं की गणना और अपने नाम निकलेगा।

आप

sc query | findstr /C:"SERVICE_NAME: myservice" 

साथ एक विशिष्ट सेवा के लिए खोज सकते याद रखें कि यह खोज केस-संवेदी है। इससे बचने के लिए आप findstr पर स्विच कर सकते हैं।

1

कैसे WMIC उपयोग के बारे में:

प्रथम सूची सभी प्रक्रियाओं, तो अपने प्रक्रिया नाम grep। यदि कोई अस्तित्व नहीं है तो कोई परिणाम मुद्रित नहीं किया जाएगा।

wmic service |findstr "ProcessName" 

उदाहरण:

C:\>wmic service |findstr "Search" 
FALSE  TRUE  Windows Search 
+0

यह एक कथन में कैसे काम करेगा? – Burt

+0

@ बर्ट: अगर कथन में कौन सी भाषा है? बैच, vbscript, सी # या यहां तक ​​कि perl? निश्चित रूप से यह बहुत आसान होगा यदि आप wc (gnu32 में coreutils का हिस्सा) स्थापित करते हैं, तो आप c:> wmic service | findstr "Search" | wc -l करेंगे, फिर निर्धारित करने के लिए उस नंबर को पकड़ने के लिए कुछ कोड लिखें। –

4

बस स्वीकार किए जाते हैं जवाब देने के लिए एक परिशिष्ट। यदि आप सेवा को पुनरारंभ करने की तुलना में अन्य चीजें करना चाहते हैं, और यह देखने के लिए देख रहे हैं कि सेवा स्थापित है या नहीं।

sc query state= all | findstr /C:"SERVICE_NAME: MyService" 
if ERRORLEVEL 0 (**My Operation**) 

इस मामले में, राज्य = सभी महत्वपूर्ण यदि सेवा प्रारंभ नहीं किया जाता है, यह स्थापित नहीं है, जो दो अलग-अलग बातें हैं के रूप में व्याख्या की जाएगी के बाद से है।

+0

जैसा कि बताया गया है, यह होना चाहिए: 'अगर ERRORLEVEL 1 (** मेरा ऑपरेशन **) ' – bstoney

3

सफलतापूर्वक परीक्षण नहीं किया जाना चाहिए: "अगर (नहीं) त्रुटि 1" ??

विंडोज शैल में "अगर त्रुटिहीन #" का अर्थ है त्रुटि त्रुटि # या उच्च है, तो "अगर त्रुटि संदेश 0" हमेशा सत्य है।

+0

नहीं है, तो यह जवाब है कि" मैं कैसे निष्पादित करने योग्य परीक्षण करता हूं या नहीं, लेकिन यह देखने के लिए कुछ भी नहीं है कि सेवा –

+0

स्थापित या चल रहा है, लेकिन मुझे इस समय टिप्पणी लिखने का कोई अधिकार नहीं था। – user2956477

2

मैं नीचे दिए गए कोड का उपयोग कर रहा:

SC QUERY | FIND "SERVICE_NAME: MyService" 
IF %ERRORLEVEL% EQU 0 NET STOP MyService 

तो MyService नहीं पाया जाता है,% errorlevel% 1 खोजते पर सेट हो जाएगा, और यह 0 पर बनी रहेगी।निर्देश IF% ERRORLEVEL% EQU 0 आपको इस अंतिम मामले का परीक्षण करने और आपकी सेवा पर एक ऑपरेशन के साथ आगे बढ़ने की अनुमति देता है।

IF ERRORLEVEL 0 NET STOP MyService 

काम नहीं करेगा, क्योंकि यह आदेश निष्पादित करता है, तो% errorlevel% अधिक से अधिक या शून्य के बराबर है।

एक दृश्य स्टूडियो पोस्ट का निर्माण होने पर, आपको एक डाल करने के लिए है: अंत में

EXIT 0 

क्योंकि वी.एस. कि% errorlevel% की पहचान करेगा = 0 और यह विचार करेंगे कि पोस्ट का निर्माण घटना में नाकाम रही है । इसे देखभाल के साथ प्रयोग करें क्योंकि इससे आपके कमांड अनुक्रम में सभी त्रुटियां छिप जाएंगी।

इस चाल के साथ, आप त्रुटि को अनदेखा करने और अपनी सेवा को पुनः आरंभ करने के लिए अपने पद का निर्माण घटना में इस का उपयोग कर सकते हैं:

NET STOP MyService 
NET START MyService 
EXIT 0 
संबंधित मुद्दे