2008-10-22 3 views
134

मैंने installUtil.exe का उपयोग कर एक विंडोज सेवा स्थापित की है।विंडोज सेवा की स्थापना रद्द करने के लिए कैसे करें

कोड अपडेट करने के बाद मैंने पहले मूल संस्करण को अनइंस्टॉल करने के लिए सेवा w/o को स्थापित करने के लिए installUtil.exe का उपयोग किया।

जब मैं अब सेवा को अनइंस्टॉल करने का प्रयास करता हूं, installUtil.exe सफलतापूर्वक अनइंस्टॉल करता है, लेकिन सेवा अभी भी दिखाई देती है।

यदि मैं अपनी संपत्तियों को बदलने की कोशिश करता हूं, तो मुझे संदेश 'सेवा हटाने के लिए चिह्नित किया जाता है' प्राप्त होता है।

मैं हटाने को कैसे मजबूर कर सकता हूं (अधिमानतः w/o सर्वर को पुनरारंभ करना)?

उत्तर

367

एक बात है कि मुझे अतीत में बाहर पकड़ा गया है कि आप सेवाओं दर्शक तो चल रहा है कि पूरी तरह से हट जाने से सेवाओं को रोकता है, इतने करीब पहले से

+26

+1 यह मेरा अनुभव भी है –

+0

उत्कृष्ट, धन्यवाद! –

+7

इसने मेरी समस्या को रीबूट किए बिना हल किया। – mirezus

4

दुर्भाग्यवश, आपको सर्वर को पुनरारंभ करने की आवश्यकता है। इसे "हटाए गए" सेवा को हटा देना चाहिए।

+1

दुखद लेकिन सच। कम से कम यह काम किया। – Manu

+11

नहीं। आपको पुनरारंभ करने की आवश्यकता नहीं है। मेरा समाधान देखें :) – johan

+2

मुझे वास्तव में उपयोगकर्ता 186749 का समाधान भी बेहतर लगता है। अच्छा और साफ। – McKay

1

क्या आप अनइंस्टॉल करने से पहले सेवा को रोकने का प्रयास कर रहे हैं? मुझे यह समस्या यादृच्छिक रूप से थी। कभी-कभी मैं इसे पुनरारंभ किए बिना हटा सकता हूं। मेरा अनुमान है कि इसे अभी भी सेवा के साथ

9
sc delete sericeName 

बस यह सुनिश्चित करने से पहले सेवा बंद कर दी गई है। मैंने यह काम ज्यादातर बार देखा है। ऐसे समय होते हैं जहां मैंने देखा है कि खिड़कियां कुछ पर फंस गई हैं और यह रीबूट पर जोर देती है।

+0

बस एक अतिरिक्त .. मुझे स्केल डिलीट कमांड चलाने के लिए एक्सेस प्राप्त करने के लिए व्यवस्थापक के रूप में अपना डॉस प्रॉम्प्ट/.NET प्रॉम्प्ट चलाने के लिए था .. बस अगर कोई और उस समस्या में चलता है। –

+0

एससी डिलीट से पहले "नेट स्टॉप " चलाएं यह सुनिश्चित करने के लिए कि सेवा – Adi

+0

हटाने से पहले बंद कर दी गई थी, यह मेरा अनुभव भी था, मुझे अंततः एक जिद्दी सेवा को हटाने के लिए रीबूट करना पड़ा जो केवल आंशिक रूप से अनइंस्टॉल किया गया था (यह अभी भी स्नैप में दिखाया गया है एक कोड 2 के साथ)। रीबूटिंग अंततः इसे दूर कर दिया गया था। – delliottg

73

अच्छी तरह से, यदि आप किसी भी मौके से अनइंस्टॉल को हटा नहीं देते हैं तो आप किसी भी विंडोज सेवा को मजबूती से हटाने के लिए SC.EXE का उपयोग कर सकते हैं।

sc delete <Service_Name> 

पर "एमएस टेक्नो ब्लॉगिंग" Deleting Services Forcefully from Services MMC

+5

इसके लिए धन्यवाद। ध्यान दें कि यदि "सेवा नाम" "प्रदर्शन नाम" जैसा नहीं है, तो आप सेवा के गुणों में "सेवा का नाम" प्राप्त कर सकते हैं। – GuiSim

+8

यदि सेवा दर्शक खोला जाता है तो यह काम नहीं करेगा –

+7

'sc delete' भी सेवा के लिए एक हैंडल खोलने पर" सेवा हटाने के लिए चिह्नित है "की रिपोर्ट करेगा। – Matt

0

अधिक पढ़ें सेवा सूची रीफ़्रेश मुझे हमेशा के लिए ऐसा किया। यदि सेवा विंडो खुली है, तो यह किसी कारण से मौजूदा की कुछ याद रखेगी। एफ 5 और मैं फिर से स्थापित कर रहा हूँ!

35

मुझे पता है कि यह मदद करने के लिए नहीं जा रहा है अगर , लेकिन यह भविष्य में किसी की मदद कर सकता है।

मुझे अभी भी एक ही समस्या है, सेवा प्रबंधक को बंद करने और फिर से खोलने के लिए रजिस्ट्री से दोनों प्रविष्टियों को हटा दिया गया है और सेवा की स्थापना रद्द कर दी गई है।

इससे पहले, सेवा प्रबंधक को रीफ्रेश करने में मदद नहीं मिली थी।

+1

चिमिंग के लिए धन्यवाद। मेरा अनुभव ठीक वही था जैसा आपने वर्णन किया था। –

116

आपको अपनी मशीन को पुनरारंभ करने की आवश्यकता नहीं है। उन्नत मोड में cmd ​​या PowerShell प्रारंभ करें।

sc.exe queryex <SERVICE_NAME> 

फिर आपको कुछ जानकारी मिल जाएगी। एक पीआईडी ​​नंबर दिखाएगा।

taskkill /pid <SERVICE_PID> /f 

जहां/एफ स्टॉप को मजबूर करना है।

अब आप अपनी सेवा इंस्टॉल या लॉन्च कर सकते हैं।

+1

बिलकुल काम किया जहां रिबूट के अलावा अन्य सभी चीजें असफल रही - बहुत खुश! – DaveF

+0

यह एक अच्छा जवाब है। कम अच्छे (आईएमएचओ) में सुझाए गए उत्तर में सुझाए गए रीबूट से काफी बेहतर है। – Benedict

+33

यह मेरे लिए काम नहीं करता - मेरी सेवा के लिए पिड 0 लौटा दी और यह मुझे एक महत्वपूर्ण सिस्टम प्रक्रिया को हटाने नहीं देगा। – plasma147

2

निम्नलिखित मशीन को पुन: प्रारंभ बिना काम करेंगे:

  1. खोज < आपके सेवा नाम रजिस्ट्री \ HKEY_LOCAL_MACHINE> (दोनों कुंजी और मूल्यों)
  2. सेट "विरासत" मान 0
को
4

बंद होने पर cmd और सेवाएं विंडो बंद करें, फिर राइट क्लिक करके cmd फिर से शुरू करें और व्यवस्थापक के रूप में चलाएं चुनें। यदि sc delete sericeName काम नहीं करता है या कुछ भी काम नहीं करता है।

http://weblogs.asp.net/avnerk/archive/2007/09/05/windows-services-services-msc-and-the-quot-this-service-is-marked-for-deletion-quot-error.aspx

0

इसके अलावा निष्पादन अभी भी सक्रिय है (शायद एक है कि हो सकता है सेवा की, चल रहे हैं जो भी कारण के लिए, स्वतंत्र रूप से) का कोई उदाहरण देखते हैं कि सुनिश्चित करें।

मैं एमएमसी खोल रहा था और बंद कर रहा था और पीआईडी ​​को मारने के लिए देख रहा था - लेकिन जब प्रक्रिया एक्सप्लोरर में देख रहे थे तो भूल गए अनुसूचित बैच से चल रही कुछ मौजूदा प्रक्रियाएं थीं। उन्हें मार डाला काम हो गया।

0

उस विषय में बहुत से फ़ोरम प्रश्न हैं।

मुझे विंडोज़ एपीआई में जवाब मिला है। सेवा को अनइंस्टॉल करने के बाद आपको कंप्यूटर को पुनरारंभ करने की आवश्यकता नहीं है। आपको कॉल करना होगा:

BOOL WINAPI CloseServiceHandle(
    SC_HANDLE hSCObject 
); 

जो सेवा के हैंडल को बंद करता है। विंडोज 7 पर यह मेरी समस्या हल हो गई। मुझे क्या करना:

  • स्टॉप सेवा
  • पास संभाल
  • स्थापना रद्द करें सेवा
  • इंतजार 3 सेकंड
  • निर्देशिका
  • करने के लिए नए exe कॉपी सेवा
  • शुरू सेवा
  • स्थापित
  • करीबी हैंडल
+2

यदि आपके पास खुले हैंडल वाले प्रोग्राम में नहीं है तो आप इसे बंद करने के लिए हैंडल कहां प्राप्त करते हैं? – Matt

1

मैं देर से कर रहा हूँ, लेकिन एक विकल्प है, जो अजीब लग सकता है जोड़ना चाहते हैं, लेकिन मैं एक और तरीका नहीं देखा:

मैं स्थापित के रूप में एक सीआई प्रक्रिया में मेरे Windows सेवा हर रात, मैं की जरूरत ऐसा कुछ जो हर समय काम करता है और पूरी तरह से स्वचालित है। किसी कारण से, सेवाओं को हमेशा अनइंस्टॉल करने के बाद लंबे समय तक (5 मिनट या अधिक) हटाने के लिए चिह्नित किया गया था। इसलिए, मुझे लगता है कि सेवा वास्तव में हटा दी जाती है (सरलीकृत संस्करण) यह सुनिश्चित करने की पुनर्स्थापना बैच स्क्रिप्ट बढ़ाया:

REM Stop the service first 
net stop My-Socket-Server 

REM Same as installutil.exe, just implemented in the service 
My.Socket.Server.exe /u 

:loop1 
    REM Easy way to wait for 5 seconds 
    ping 192.0.2.2 -n 1 -w 5000 > nul 
    sc delete My-Socket-Server 
    echo %date% %time%: Trying to delete service. 
    if errorlevel 1072 goto :loop1 

REM Just for output purposes, typically I get that the service does not exist 
sc query My-Socket-Server 

REM Installing the new service, same as installutil.exe but in code 
My.Socket.Server.exe /i 

REM Start the new service 
net start My-Socket-Server 

मैं क्या देख सकते हैं, जब तक कि सेवा के बारे में 5 मिनट के लिए हटाने के लिए चिह्नित किया गया है (!) यह अंत में चला जाता है। अंत में, मुझे किसी और मैन्युअल हस्तक्षेप की आवश्यकता नहीं है। मैं भविष्य में स्क्रिप्ट का विस्तार करूंगा ताकि कुछ निश्चित समय के बाद कुछ हो (उदा। 30 मिनट के बाद अधिसूचना)।

3

बस अगर यह उत्तर किसी की सहायता करता है: here के रूप में, आप Sysinternals Autoruns को व्यवस्थापक के रूप में चलाने में बहुत सारी परेशानी बचा सकते हैं। बस "सेवा" टैब पर जाएं और अपनी सेवा हटाएं।

यह मेरे लिए एक मशीन पर चाल है जहां मुझे रजिस्ट्री को संपादित करने की कोई अनुमति नहीं थी।

0

आप HKLM\SYSTEM\CurrentControlSet\Services पर स्थित अपनी सेवा के लिए मैन्युअल रूप से रजिस्ट्री कुंजी को हटा सकते हैं, उसके बाद आपको सेवा नियंत्रण प्रबंधक (रीफ्रेश करने या बदलने के लिए फिर से खोलने की आवश्यकता) में सेवा दिखाई नहीं देगी, और आप सेवा को पुनर्स्थापित कर सकते हैं हमेशा की तरह।

+0

विंडोज 2012 आर 2 पर, सेवाएं एमएमसी स्नैप-इन (Services.MSC) को प्रदर्शित करने के लिए "_ पढ़ने के लिए आवश्यक विवरण प्रदर्शित करने का कारण बनता है। त्रुटि कोड: 2_"। यह सुनिश्चित करने के बावजूद कि अन्य सभी एमएमसी बंद थे और कोई अन्य उपयोगकर्ता लॉग-इन नहीं हुआ। – Signal15

+0

मैं देखता हूं, केवल विंडोज 8 और विंडोज 10 में परीक्षण किया गया (और यह काम करता है)। –

0

मैं अपने ऑक्टोपस परिनियोजन उदाहरणों के लिए कुछ स्थानों से एक साथ cobbled निम्नलिखित PowerShell का उपयोग करता हूं जब TopShelf गड़बड़ हो जाता है या कोई अन्य कारण किसी सेवा के लिए विफल रहता है।

$ServiceName = 'MyNaughtyService' 
$ServiceName | Stop-Service -ErrorAction SilentlyContinue 
# We tried nicely, now KILL!!! 
$ServiceNamePID = Get-Service | Where { $_.Name -eq $ServiceName} # If it was hung($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and 
$ServicePID = (Get-WmiObject Win32_Service | Where {$_.Name -eq $ServiceNamePID.Name}).ProcessID 
Stop-Process $ServicePID -Force 
0

इस के लिए मुझे

$a = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq 'psexesvc'} 
$a.Delete() 
+0

यदि आपका आउटपुट 'रिटर्नवैल्यू: 16' दिखाता है, तो कमांड "_This सेवा को system_ से हटाया जा रहा है" के साथ विफल रहा। माइक्रोसॉफ्ट से रिटर्नवैल की पूरी सूची [यहां] (https://msdn.microsoft.com/en-us/library/aa393673 (v = vs.85) .aspx) – Signal15

0

काम आप सेवाएं में सेवा नहीं रोक सकता है, तो आप कार्य प्रबंधक में अपनी खिड़कियों सेवा exe रोक सकता है। उसके बाद, आप सेवा को हटा सकते हैं।