विंडोज़ सेवा की स्थापना रद्द करने के लिए कैसे मजबूर करें


173

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

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

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

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

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


यदि सेवा लटकी हुई है और हटाने का काम नहीं करता है , तो विंडोज़ सेवा की स्थापना रद्द करने के लिए कैसे बाध्य करें
Wernfried Domscheit

जवाबों:


469

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


70
मैं शायद ही विश्वास कर पाऊं कि दर्शक के खुले होने से सेवा निष्कासन होता है - कितना मूर्ख!
ड्रेमन

1
यह Microsoft से बहुत बेवकूफ है, लेकिन यह वास्तव में काम करता है। कुछ अस्पष्ट कारणों के लिए, सेवा दर्शक खुले होने से उन्हें कभी-कभी ठीक से हटाए जाने से रोकता है।
ivantod

1
मुझे लगता है कि इस उत्तर में इसी तरह की टिप्पणी के सौ हैं। मैं इस बेवकूफ मुद्दे के साथ सिर्फ 30min खो दिया है ...
PierrOz

2
ऐसा लगता है कि SysInternals प्रक्रिया एक्सप्लोरर भी सेवाओं को बंद कर देता है (और शायद कार्य प्रबंधक भी) तो सुनिश्चित करें कि आप उन्हें भी बंद कर दें!
danio

3
cmd प्रॉम्प्ट का उपयोग करना भी सुनिश्चित करें। PowerShell कोई त्रुटि नहीं दिखाता है, लेकिन या तो डिलीट नहीं करता है।
ब्रूनो फारिया

145

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

sc.exe queryex <SERVICE_NAME>

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

taskkill /pid <SERVICE_PID> /f

जहां / च को जबरदस्ती रोकना है।

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


2
बिलियली काम किया जहाँ रिबूट के अलावा और सब कुछ विफल रहा - अच्छी तरह से प्रसन्न!
डेवएफ

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

4
ए + भयानक। इसके बाद sc delete का प्रयोग करें।
जोन 12

7
PID के रूप में काम नहीं किया 0 के रूप में आया था, इससे मेरा मुद्दा हल हो गया - (SC) DeleteService FAILED 1072
Web-E

3
बिलकुल मददगार! मेरे मामले में, रिबूट से कम कुछ भी काम नहीं किया। रजिस्ट्री में सेवा निर्देशिका को हटाना भी नहीं है! एक गोटा हालांकि: यदि आप PowerShell उपयोग में काम कर रहे हैं sc.exe queryex <SERVICENAME>:। क्योंकि scयह भी एक उपनाम है Set-Content, जब आप इसका उपयोग करेंगे तो यह मूर्खतापूर्ण होगा।
इफिदी ओकोनकॉवो

97

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

sc delete <Service_Name>

"एमएम टेक्नो ब्लॉगिंग" पर और अधिक पढ़ें सेवा एमएमसी से सेवाओं को हटाना


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

8
sc deleteयह भी रिपोर्ट करेगा कि "सेवा को हटाने के लिए चिह्नित किया गया है" यदि सेवा के लिए कोई हैंडल खुला है।
मैट

@ GuiSim के लिए धन्यवाद, मुझे संदेह है कि कई प्रदर्शन नाम रख देंगे जैसे मैं था!
nik0lai

कोशिश की गई लेकिन यह संदेश मिल गया: [SC] DeleteService FAILED 1072: हटाने के लिए निर्दिष्ट सेवा को चिह्नित किया गया है।
एंड्रयू डब्ल्यू फिलिप्स

37

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

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

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


1
इसमें चिमने के लिए धन्यवाद। मेरा अनुभव बिल्कुल वैसा ही था जैसा आपने बताया।
पीके।

10
sc delete sericeName

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


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

"नेट STOP <serviceName>" रन से पहले एससी DELETE सुनिश्चित करें कि सेवा को हटाने से पहले रोक दिया गया था
आदि

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

5

बंद 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


4

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


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

2
मैं वास्तव में user186749 समाधान भी बेहतर पसंद है। अच्छा और साफ।
मैके

3

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

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


3

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


Windows 2012 R2 पर, सेवा MMC स्नैप-इन (Services.MSC) "प्रदर्शित करने में विफल रहने का वर्णन करने में विफल रहता है। त्रुटि कोड: 2 " प्रदर्शित करता है। यह सुनिश्चित करने के बावजूद कि अन्य सभी MMCs बंद थे और कोई अन्य उपयोगकर्ता लॉग-इन नहीं करता था।
सिग्नल 15

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

आखिरकार मेरी समस्या हल हो गई। मैं परियोजना में सेवा इंस्टॉलर जोड़ना भूल गया और स्थापना के बाद अपनी सेवा नहीं हटा सका। मैं इसमें कुछ भी हटाने से पहले सेवा reg पेड़ का निर्यात करने की सलाह देता हूं। आपका बहुत बहुत धन्यवाद!
user3772108

2

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

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

1

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


1

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

जैसा कि मैं प्रत्येक रात एक सी आई प्रक्रिया में अपनी विंडोज सेवा स्थापित करता हूं, मुझे कुछ ऐसा चाहिए था जो हर समय काम करता हो और पूरी तरह से स्वचालित हो। किसी कारण से, सेवाओं को हमेशा के लिए हटाने के बाद लंबे समय (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 मिनट के बाद अधिसूचना)।


1

इसने मेरे लिए काम किया

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

यदि आपका आउटपुट उस शो से है ReturnValue : 16, तो कमांड " इस सेवा को सिस्टम से हटाया जा रहा है " के साथ विफल हो गया । Microsoft से ReturnValues ​​की पूरी सूची यहां
सिग्नल 15

1

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


0

सेवा सूची को ताज़ा करना हमेशा मेरे लिए था। यदि सेवाएँ विंडो खुली है, तो यह किसी कारण के लिए इसकी कुछ मेमोरी को रोक कर रखेगी। F5 और मैं फिर से पुनः स्थापित कर रहा हूँ!


0

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

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


0

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

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

BOOL WINAPI CloseServiceHandle(
  SC_HANDLE hSCObject
);

वह सेवा का हैंडल बंद कर देता है। विंडोज 7 पर इसने मेरी समस्या हल कर दी। मैं करता हूँ:

  • सेवा रोकें
  • बंद संभाल
  • सेवा की स्थापना रद्द करें
  • 3 सेकंड प्रतीक्षा करें
  • निर्देशिका के लिए नए exe की प्रतिलिपि बनाएँ
  • सेवा स्थापित करें
  • सेवा शुरू करें
  • बंद संभाल

2
यदि आपको उस प्रोग्राम में बंद करने के लिए हैंडल मिलता है, तो उस प्रोग्राम में नहीं है जिसमें ओपन हैंडल है?
मैट

0

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

$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

यह भी ध्यान देने योग्य है कि यह:

sc delete "ServiceName"

PowerShell में काम नहीं करता, PowerShell में cmdlet सेट-सामग्री के लिए sc एक उपनाम है। आपको करने की जरूरत है:

sc.exe delete "ServiceName"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.