सवाल विंडोज़ सेवा को अनइंस्टॉल कैसे करें और रीबूट किए बिना अपनी फाइलें कैसे हटाएं


मेरी वर्तमान परियोजना में एक अपग्रेड किए गए .exe फ़ाइल को तैनात करना शामिल है जो विंडोज सेवा के रूप में चलता है। नए संस्करण के साथ मौजूदा .exe को ओवरराइट करने के लिए, मुझे वर्तमान में यह करना होगा:

  1. सेवा बंद करो
  2. सेवा अनइंस्टॉल करें
  3. सिस्टम को रीबूट करें (इसलिए विंडोज़ फ़ाइल पर इसकी धारणा जारी करता है)
  4. नया .exe तैनात करें
  5. सेवा को पुनर्स्थापित करें
  6. अपग्रेड की गई सेवा शुरू करें।

मैं रीबूट से बचना चाहता हूं, ताकि यह पूरी तरह से लिखित / स्वचालित अपग्रेड हो।

क्या रीबूट करने से बचने का कोई तरीका है? हो सकता है कि एक कमांड लाइन उपकरण जो विंडोज को पुराने .exe पर उसकी मौत पकड़ छोड़ने के लिए मजबूर करेगा?


44
2017-11-18 18:06


मूल


आपकी मदद के लिए सभी को शुक्रिया! मैंने पाया कि मेरी समस्या का स्रोत WMI द्वारा .exe पर एक हैंडल था। मेरा नया प्रश्न यहां देखें: stackoverflow.com/questions/302315/... - Nate Sauber
एफवाईआई, यदि आपके पास सेवा प्रबंधक खुला है, तो आपको सेवा को दोबारा स्थापित करने से पहले बंद करना होगा या अन्यथा आपको 'सेवा को हटाने के लिए पहले ही चिह्नित किया गया है' त्रुटि मिलेगी। - ChandlerPelhams
में मेरा अनुभव "[एससी] CreateService FAILED 1072: निर्दिष्ट सेवा को हटाने के लिए चिह्नित किया गया है" इस पर निर्भर करता है कि सेवा को अनइंस्टॉल किया गया है या नहीं, पहले बंद कर दिया गया है। मैंने बस सेवा प्रशासनिक उपकरण को खोलने में त्रुटि को पुन: उत्पन्न करने की कोशिश की और वह असमर्थ था। - J0e3gan


जवाब:


sc delete "service name"

एक सेवा हटा देंगे। मुझे लगता है कि एससी उपयोगिता installutil के लिए चारों ओर खोदने से पता लगाने के लिए बहुत आसान है। यदि आप पहले से नहीं हैं तो सेवा को रोकना याद रखें।


77
2017-11-19 13:47



एससी कम से कम विंडोज 7 पर "सेवा का नाम" हटाएं। - Esben Skov Pedersen
हाँ ... और अंततः एमएस * - "जैसे * nix पर जायेंगे। एक समय में एक कदम =) - StingyJack
मेरे मामले में, कमांड "serviceName" को हटाता है नोट है कि आपको कमांड लाइन को व्यवस्थापक के रूप में उत्साहित करना होगा - k.honsali
मैंने पाया उस sc delete इसे अनइंस्टॉल करते समय चल रही सेवा को रोकता नहीं है बल्कि इसे हटाने के लिए चिह्नित करता है, जो इसके दस्तावेज़ों का भी वर्णन करता है। - J0e3gan


क्या आप नीचे दिए गए आदेशों का उपयोग करके अद्यतन (और अद्यतन के बाद पुनरारंभ) से पहले सेवा को रोकने में सक्षम नहीं हैं?

net stop <service name>
net start <service name>

जब भी मैं एक सेवा का परीक्षण / तैनाती कर रहा हूं, तब तक जब तक सेवा बंद नहीं होती है तब तक मैं फ़ाइलों को पुनर्स्थापित करने में सक्षम हूं। मुझे यकीन नहीं है कि आपके पास जो मुद्दा है वह अलग है।


14
2017-11-18 18:10



यह हमेशा मेरा अनुभव रहा है - मैंने केवल उन्हें रोककर और .EXE को बदलकर अंतहीन रूप से अपडेट की गई सेवाओं को अपडेट किया है। वैसे भी यह केवल एक साधारण प्रक्रिया है। - Will Dean
यहां वही - विंडोज सेवाओं के एक सूट (विंडोज 7 पर चल रहे) पर विकास के महीनों के लिए वर्णित मेरे लिए काम किया। - J0e3gan


मुझे आपके जैसी ही समस्या थी। मेरे पास एक सिस्टम सेवा है जिसे मैं अनइंस्टॉल करना चाहता हूं और बाद में अपडेट के हिस्से के रूप में पुनर्स्थापित करना चाहता हूं। कुछ सिस्टम पर यह रीबूट के बिना काम नहीं करेगा। समस्या यह थी कि DeleteService () को कॉल ठीक से वापस आ जाएगा, लेकिन CreateService () के लिए निम्न कॉल मुझे बताएगी कि सेवा अभी भी वहां थी, लेकिन हटाने के लिए चिह्नित (त्रुटि कोड 1072)। रजिस्ट्री उस प्रतिबिंबित करेगी, चूंकि उपकुंजी अभी भी वहां थी (HKLM \ System \ CurrentControlSet \ Services के तहत), लेकिन "DeleteFlag" को 1 पर सेट किया गया था। उस बिंदु से, केवल एक रीबूट स्थिति को ठीक कर सकता है।

कुछ चीजें जो काम नहीं करती हैं:

  • "एससी डिलीट" का उपयोग करना: इसमें वही समस्याएं थीं। कॉल ठीक हो जाएगा, लेकिन सेवा वास्तव में नहीं गई थी और अभी भी DeleteFlag = 1 के साथ रजिस्ट्री में थी।
  • रजिस्ट्री में कुंजी को हटा रहा है। सेवा प्रबंधक स्मृति में डेटाबेस रखना प्रतीत होता है और रजिस्ट्री अगले बूट के लिए इसकी एक प्रति है।
  • प्रतीक्षा लूप जोड़ना, .exe फ़ाइलों को ओवरराइट करने, प्रक्रिया को मारने के लिए तैयार होने की प्रतीक्षा कर रहा है।
  • सेवा के लिए बंद हैंडल। कौन सा??

लेकिन यहां क्या काम किया गया है:

मैंने यहां कुछ लेखों में देखा है जो stackoverflow पर net.exe ने सुविधाओं को शुरू / बंद कर दिया है (मुझे केवल sc.exe उपयोगिता के बारे में पता था)। और आश्चर्यजनक रूप से पर्याप्त, एक "नेट स्टॉप svcname" प्लस एक "एससी हटाएं svcname" काम किया! तो net.exe ऐसा कुछ करना चाहिए जो मैं नहीं करता।

लेकिन net.exe में ControlService () में कोई आयात नहीं है, तो यह सेवा को कैसे रोकता है? मुझे पता चला कि net.exe net1.exe spawns, लेकिन net1.exe ControlService () को भी आयात नहीं करता है। मैंने महान एपीआई मॉनीटर उपयोगिता का उपयोग किया ( http://www.rohitab.com/apimonitor ) यह देखने के लिए कि net1.exe क्या कर रहा है, लेकिन यह कभी भी ऐसा कुछ नहीं कहता जो वादा करता था।

लेकिन फिर मैंने देखा कि यह NetServiceControl () को NETAPI32.DLL से आयात करता है (जिसमें कम से कम "सेवा" इसके नाम पर थी!)। एमएसडीएन का कहना है कि यह कार्य अप्रचलित है। फिर भी, मुझे LMSvc.h में प्रोटोटाइप और कुछ पैरामीटर विवरण यहां मिला: http://cyberkinetica.homeunix.net/os2tk45/srvfpgr/369_L2_NetServiceControlorN.html । जब आप NETAPI32.DLL लोड करते हैं और उपयोग करते हैं NetServiceControl(NULL, service_name, 3, 0, 0) (3 SERVICE_CTRL_UNINSTALL के लिए है, जिसका उपयोग रोकने के लिए किया जाता है) सेवा बाद में बंद हो जाती है। और इसे हटाया जा सकता है और हटाए बिना हटाए जा सकते हैं हटाएं या रीबूट करें!

तो यह कभी भी हटाने की समस्या नहीं थी, लेकिन सेवा को ठीक से रोकने के लिए। और NetServiceControl () चाल करता है। लंबी पोस्ट के लिए खेद है, लेकिन मैंने सोचा कि यह किसी भी तरह की समस्याओं के साथ किसी की मदद कर सकता है। (बस संदर्भ के लिए, मैं Win7 SP1 x64 का उपयोग करता हूं।)


13
2017-07-09 16:15



आप "हटाने के लिए चिह्नित" स्थिति का भरोसेमंद अनुकरण कैसे करते हैं? मैंने इसे अनुकरण करने के लिए क्या किया है, सामान्य सेवाओं एपीआई के साथ सेवा के लिए सिर्फ एक हैंडल खोलना है। हैंडल खोलने के साथ, यह विधि काम नहीं करती है। जब हैंडल बंद हो जाता है, तो सेवा स्वचालित रूप से गायब हो जाती है। - shoosh
Thanx! मैं 'नेट स्टॉप' और 'एससी स्टॉप' के बीच के अंतर की तलाश में था - Nerielle
महान विश्लेषण! - Max


अगर .NET में (मुझे यकीन नहीं है कि यह सभी विंडोज सेवाओं के लिए काम करता है)

  • सेवा को रोकें (यही कारण है कि आपको कोई समस्या हो रही है।)
  • InstallUtil -u [निष्पादन योग्य का नाम]
  • Installutil -i [निष्पादन योग्य का नाम]
  • सेवा फिर से शुरू करें ...

जब तक मैं सेवा के सार्वजनिक इंटरफ़ेस को बदल नहीं रहा हूं, मैं अक्सर अपनी सेवाओं के अपग्रेड किए गए संस्करणों को बिना किसी अनइंस्टॉलिंग / पुनर्स्थापित करने के तैनात करता हूं ... ALL मैं सेवा रोकता हूं, फ़ाइलों को प्रतिस्थापित करता हूं और फिर से सेवा को पुनरारंभ करता हूं ...


3
2017-11-18 18:28



मेरे मामले में, मैं कुछ अनुमति मुद्दे के कारण ऐसा नहीं कर सकता - k.honsali


जैसा कि स्टिंगजैक और एमबीबाला द्वारा उल्लेख किया गया है, और माइक एल द्वारा की गई टिप्पणियों के संदर्भ में, मेरा अनुभव यह है कि विंडोज 2000 मशीन पर, जब अनइंस्टॉल करना / पुनर्स्थापित करना .NET सेवाएं, "installutil / u" कर देता है एक रीबूट की आवश्यकता होती है, भले ही सेवा पहले बंद कर दी गई थी। दूसरी तरफ, "स्कैन / डिलीट" को रीबूट की आवश्यकता नहीं होती है - यह तुरंत सेवा को हटा देता है (जब तक इसे रोक दिया जाता है)।

मैंने अक्सर सोचा है, वास्तव में, क्या एक अच्छा कारण है "installutil / u" को रीबूट की आवश्यकता है ... क्या वास्तव में कुछ गलत / कुछ लटकने से "स्कैन / डिलीट" है?


3
2018-03-11 17:31



योग्यता के लिए +1 "(जब तक यह बंद हो जाता है)"। यह मेरे अनुभव के अनुरूप है - यद्यपि विंडोज 7 पर। - J0e3gan


जोनाथन और चार्ल्स दोनों सही हैं ... आपको पहले सेवा को रोकना होगा, फिर अनइंस्टॉल / पुनर्स्थापित करें। अपने दो उत्तरों का संयोजन सही बैच फ़ाइल या PowerShell स्क्रिप्ट बनाता है।

मैं सावधानी बरतने का सावधानी बरतूँगा - विंडोज 2000 सर्वर (संभवतः क्लाइंट ओएस भी) को पुनर्स्थापित करने से पहले रीबूट की आवश्यकता होगी इससे कोई फर्क नहीं पड़ता। एक रजिस्ट्री कुंजी होनी चाहिए जो बॉक्स को रीबूट होने तक पूरी तरह से साफ़ नहीं किया जाता है। विंडोज सर्वर 2003, विंडोज एक्सपी और बाद के ओएस संस्करणों में दर्द नहीं होता है।


2
2017-11-18 18:41





(इसलिए विंडोज़ ने इसे पकड़ लिया है   फाइल)

इसके बजाय, सेवा के बंद होने के बाद Ctrl + Alt + Del सही करें और सेवा के .exe को मार दें। इसके अलावा, आप बिना रीबूट किए सेवा को अनइंस्टॉल कर सकते हैं। यह अतीत में मेरे साथ हुआ और यह उस हिस्से को हल करता है जिसे आपको रीबूट करने की आवश्यकता है।


2
2017-11-19 13:25





सेवा को मैन्युअल रूप से निकालना आवश्यक होना चाहिए:

  1. Regedit या regedt32 चलाएं।
  2. निम्न कुंजी के तहत अपनी सेवा के लिए रजिस्ट्री कुंजी प्रविष्टि पाएं:   HKEY_LOCAL_MACHINE / सिस्टम / CurrentControlSet / सेवाएँ
  3. रजिस्ट्री कुंजी हटाएं

सेवाओं में सूची अपडेट होने से पहले आपको रीबूट करना होगा


2
2017-09-22 15:46





मैं .NET Framework के साथ पैक किया गया InstallUtil.exe का उपयोग कर रहा हूं।

अनइंस्टॉल करने के लिए उपयोग है: इंस्टॉल करें \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ installutil MyService.HostService.exe /u

/u स्विच अनइंस्टॉल करने के लिए खड़ा है, इसके बिना उपयोग सेवा की सामान्य स्थापना करता है। यदि यह चल रहा है तो उपयोगिता सेवा को रोक देती है और मुझे सेवा फ़ाइलों पर लॉक रखने के लिए विंडोज़ में कभी समस्या नहीं थी। आप InstallUtil के अन्य विकल्पों के बारे में पढ़ सकते हैं MSDN

पीएस: यदि आपके पास अपने पथ परिवर्तक में installutil नहीं है तो इस तरह का पूरा पथ उपयोग करें: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "C:\MyServiceFolder\MyService.HostService.exe" /u  या यदि आपको 64 बिट संस्करण की आवश्यकता है तो यह 'सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework64 \ v4.0.30319 \' में पाया जा सकता है। पथ में संस्करण संख्या .NET संस्करण के आधार पर भिन्न होती है।


0
2018-04-17 06:48