इंटरनेट। कंप्यूटर। मदद करना। सलाह. मरम्मत

कौन सी विंडोज़ सेवाओं की आवश्यकता है और कौन सी सेवाओं को अक्षम किया जा सकता है। किसी एप्लिकेशन को विंडोज़ सेवा के रूप में कैसे चलाएं विंडोज़ में सेवाएँ किस उपयोगकर्ता के अंतर्गत चलती हैं?

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

क्या क्लाइंट एप्लिकेशन को सेवा के रूप में चलाना संभव है? उनमें से एक में, मैंने मानक ओएस टूल का उपयोग करके विंडोज सेवा बनाने के तरीकों का वर्णन किया है। हालाँकि, प्रत्येक कंसोल एप्लिकेशन एक सेवा के रूप में नहीं चल सकता है, और ग्राफ़िकल इंटरफ़ेस वाले प्रोग्राम, सिद्धांत रूप में, इस तरह से काम नहीं कर सकते हैं। लेकिन एप्लिकेशन को एक सेवा के रूप में चलाना अभी भी संभव है, और मूल नाम वाला एक प्रोग्राम इसमें हमारी मदद करेगा गैर-चूसनेवाला सेवा प्रबंधक.

एनएसएसएम मुफ़्त और ओपन सोर्स सॉफ़्टवेयर है और विंडोज़ 2000 से विंडोज़ 8 तक सभी माइक्रोसॉफ्ट ऑपरेटिंग सिस्टम का समर्थन करता है। एनएसएसएम को इंस्टॉलेशन की आवश्यकता नहीं है, बस इसे डाउनलोड करें और अनज़िप करें। वितरण में 32- और 64-बिट ऑपरेटिंग सिस्टम के संस्करण शामिल हैं। आप प्रोग्राम को nssm.cc वेबसाइट से प्राप्त कर सकते हैं, फिलहाल नवीनतम स्थिर संस्करण 2.21.1 है, जिसका मैं उपयोग करूंगा।

एनएसएसएम की क्षमताओं को प्रदर्शित करने के लिए, आइए विंडोज नोटपैड को विंडोज 8.1 पर एक सेवा के रूप में चलाने का प्रयास करें।

एक सेवा बनाना

नाम की एक सेवा बनाने के लिए नोटपैडकमांड कंसोल लॉन्च करें, अनपैक्ड एनएसएसएम (64-बिट विंडोज के लिए) वाले फ़ोल्डर में जाएं और एनएसएसएम इंस्टॉल नोटपैड कमांड दर्ज करें, जो एनएसएसएम ग्राफिकल इंस्टॉलर विंडो खोलता है। एक सेवा बनाने के लिए, बस पथ फ़ील्ड में निष्पादन योग्य फ़ाइल का पथ निर्दिष्ट करें और "सेवा स्थापित करें" बटन पर क्लिक करें। इसके अतिरिक्त, विकल्प फ़ील्ड में आप सेवा शुरू करने के लिए आवश्यक कुंजियाँ निर्दिष्ट कर सकते हैं।

नई सेवा बनाते समय आप कुछ अतिरिक्त पैरामीटर भी निर्दिष्ट कर सकते हैं।

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

एप्लिकेशन को बंद करने के चार चरण हैं, और डिफ़ॉल्ट रूप से उनका उपयोग इस क्रम में किया जाएगा:

पहले चरण में, NSSM एक इवेंट जेनरेट करने और भेजने का प्रयास करता है Ctrl+C.यह विधि कंसोल अनुप्रयोगों या स्क्रिप्ट के लिए अच्छी तरह से काम करती है, लेकिन ग्राफिकल अनुप्रयोगों के लिए लागू नहीं है;
NSSM तब एप्लिकेशन द्वारा बनाई गई सभी विंडो का पता लगाता है और उन्हें WM_CLOSE संदेश भेजता है, जिससे एप्लिकेशन बाहर निकल जाता है;
तीसरा चरण यह है कि एनएसएसएम एप्लिकेशन द्वारा बनाए गए सभी थ्रेड्स की गणना करता है और उन्हें एक WM_QUIT संदेश भेजता है, जो तब प्राप्त होगा जब एप्लिकेशन में थ्रेड संदेश कतार हो;
अंतिम उपाय के रूप में, एनएसएसएम टर्मिनेटप्रोसेस() विधि को कॉल कर सकता है, जिससे एप्लिकेशन को समाप्त करना पड़ सकता है।

कुछ या यहां तक ​​कि सभी तरीकों को अक्षम करना संभव है, लेकिन अलग-अलग एप्लिकेशन के लिए अलग-अलग तरीके काम करते हैं और यह सुनिश्चित करने के लिए कि एप्लिकेशन सही ढंग से बंद हो जाए, सब कुछ वैसे ही छोड़ने की सिफारिश की जाती है।

डिफ़ॉल्ट रूप से, जब कोई सेवा क्रैश हो जाती है, तो एनएसएसएम उसे पुनः आरंभ करने का प्रयास करता है। "एक्ज़िट एक्शन" टैब पर, आप एप्लिकेशन के असामान्य रूप से समाप्त होने पर स्वचालित कार्रवाई को बदल सकते हैं, साथ ही एप्लिकेशन के स्वचालित रूप से पुनरारंभ होने से पहले देरी भी सेट कर सकते हैं।

"इनपुट/आउटपुट (आई/ओ)" टैब पर, आप किसी निर्दिष्ट फ़ाइल में एप्लिकेशन इनपुट/आउटपुट का पुनर्निर्देशन सेट कर सकते हैं।

"पर्यावरण" टैब पर, आप सेवा के लिए नए पर्यावरण चर सेट कर सकते हैं, या मौजूदा को ओवरराइड कर सकते हैं।

आप ग्राफिकल शेल का उपयोग भी नहीं कर सकते हैं और निम्नलिखित कमांड के साथ तुरंत कंसोल में एक सेवा बना सकते हैं:

एनएसएसएम नोटपैड स्थापित करें ″C:\Windows\system32\notepad.exe″

सेवा प्रबंधन

एनएसएसएम का उपयोग करके सेवा बनाने के बाद, सर्विसेज स्नैप-इन पर जाएं और नोटपैड सेवा ढूंढें। जैसा कि आप देख सकते हैं, दिखने में यह अन्य सेवाओं से अलग नहीं है, हम इसे शुरू भी कर सकते हैं, रोक भी सकते हैं, या लॉन्च मोड भी बदल सकते हैं। हालाँकि, ध्यान दें कि nssm.exe निष्पादन योग्य फ़ाइल के रूप में सूचीबद्ध है।

और यदि हम टास्क मैनेजर में जाते हैं, तो हम निम्नलिखित चित्र देखेंगे: एनएसएसएम मुख्य (मूल) प्रक्रिया के रूप में चल रहा है, नोटपैड सेवा इसकी चाइल्ड प्रक्रिया के रूप में चल रही है, और नोटपैड एप्लिकेशन पहले से ही इस चाइल्ड प्रक्रिया में चल रहा है।

किसी सेवा को हटाया जा रहा है

किसी सेवा को हटाने के लिए, एनएसएसएम रिमूव नोटपैड कमांड दर्ज करें और इसके हटाने की पुष्टि करें। और कमांड एनएसएसएम रिमूव नोटपैड कन्फर्म दर्ज करके, आप पुष्टि के बिना कर सकते हैं।

इंटरैक्टिव ढंग से एक सेवा प्रारंभ करें

उपयोगकर्ता एप्लिकेशन और सेवा के बीच मुख्य अंतर यह है कि, एक बार लॉन्च होने के बाद, एप्लिकेशन को चलते रहने के लिए अतिरिक्त उपयोगकर्ता क्रियाओं की आवश्यकता हो सकती है, जैसे बटन दबाना या कमांड दर्ज करना। ऐसा करने के लिए, आपको उस तक पहुंच प्राप्त करने की आवश्यकता है, जो, जैसा कि यह पता चला है, करना इतना आसान नहीं है।

किसी सेवा को इंटरैक्टिव मोड में शुरू करने के लिए, आपको सेवा स्नैप-इन में इसके गुणों को खोलना होगा और "लॉगिन" टैब पर, "डेस्कटॉप के साथ इंटरैक्शन की अनुमति दें" चेकबॉक्स को चेक करना होगा।

और फिर चमत्कार शुरू होते हैं :) इंटरैक्टिव मोड में लॉन्च की गई सेवा एक अलग सत्र (सत्र 0) में खुलती है। इस सत्र को केवल इंटरएक्टिव सर्विसेज डिटेक्शन सर्विस (यूआई0डिटेक्ट) का उपयोग करके एक्सेस किया जा सकता है, जो कंप्यूटर पर इंटरैक्टिव सेवाओं के स्टार्टअप की निगरानी करता है और अलर्ट जारी करता है। Windows 7\Server 2008 में यह सेवा डिफ़ॉल्ट रूप से सक्रिय है, लेकिन Windows 8\Server 2012 में यह अक्षम है और सेवा ग्राफ़िकल स्नैप-इन में दिखाई नहीं देती है (कम से कम मुझे यह वहां नहीं मिली)। इसके अलावा, यदि आपको यह रहस्यमय सेवा मिलती है और इसे शुरू करने का प्रयास करते हैं, तो आपको एक त्रुटि संदेश प्राप्त होगा।

लेकिन तथ्य यह है कि इसे चलाने के लिए आपको अपने कंप्यूटर पर इंटरैक्टिव सेवाओं को चलने की अनुमति देनी होगी। इसलिए, रजिस्ट्री संपादक खोलें, HKLM\System\CurrentControlSet\Control\Windows अनुभाग में एक DWORD प्रकार पैरामीटर ढूंढें कोई इंटरैक्टिव सेवाएँ नहींऔर इसका मान सेट करें 0 .

फिर पॉवरशेल कंसोल खोलें और कमांड के साथ डिस्कवरी सेवा शुरू करें:

प्रारंभ-सेवा-नाम ui0detect

यह सुनिश्चित करने के बाद कि डिटेक्शन सेवा चल रही है, हम नोटपैड सेवा को पुनरारंभ करते हैं, और हमें यह विंडो मिलती है। "संदेश देखें" चुनें

और हम स्वयं को शून्य सत्र में पाते हैं जिसमें हमारा एप्लिकेशन चलता है। फिर हम इसके साथ आवश्यक कार्रवाई करते हैं और वापस लौट आते हैं।

विंडोज़ सेवाओं के रूप में एप्लिकेशन चलाने के लिए यह एक दिलचस्प समाधान है। सबसे सुंदर तो नहीं, लेकिन अपने नाम के अनुरूप :)

आप एक विशेष विंडोज़ प्रबंधक में सेवाओं के संचालन को कॉन्फ़िगर कर सकते हैं। इसे खोलने के लिए, Windows + R कुंजी संयोजन का उपयोग करें, दिखाई देने वाली पंक्ति में Services.msc दर्ज करें और Enter दबाएँ। आपको समान या समान (यदि आपके पास पुराने OS संस्करणों में से एक है) विंडो दिखाई देगी:

प्रबंधक सेवाओं को तालिका के रूप में प्रदर्शित करता है। यहां आप उपलब्ध सेवाओं की सूची देख सकते हैं, उनका संक्षिप्त विवरण पढ़ सकते हैं और उनकी वर्तमान स्थिति का पता लगा सकते हैं। "स्टार्टअप प्रकार" कॉलम का विशेष महत्व है। यह वह है जो दिखाता है कि कोई विशिष्ट सेवा सक्षम है या नहीं और इसे सिस्टम द्वारा किस मोड में लॉन्च किया गया है।

किसी एक सेवा पर डबल-क्लिक करने पर आपके सामने एक विंडो खुलेगी जिसमें आप इसे अक्षम कर सकते हैं। बस "स्टार्टअप प्रकार" आइटम खोलें, "अक्षम" चुनें और "ओके" पर क्लिक करें। लेकिन अन्य लॉन्च विकल्पों के बीच एक "मैन्युअल" मान भी है। सुरक्षा कारणों से, उन सभी सेवाओं के लिए इसे चुनें जिन्हें आप अक्षम करना चाहते हैं। इससे सिस्टम को सेवाएं तब शुरू करने की अनुमति मिलेगी जब उनकी वास्तव में आवश्यकता होगी, और बाकी समय उन पर समय बर्बाद नहीं होगा।

सेवाओं को पूरी तरह से अक्षम न करें, बल्कि उन्हें केवल मैन्युअल मोड पर स्विच करें।

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

हमारी सूची की कुछ सेवाएँ आपके पीसी पर पहले से ही पूरी तरह से अक्षम हो सकती हैं या शुरू में मैन्युअल मोड में काम कर सकती हैं। उस स्थिति में, बस उन्हें छोड़ दें।

सेवाओं को कॉन्फ़िगर करने की प्रक्रिया के दौरान गलत कार्यों से सिस्टम का गलत संचालन हो सकता है। परिवर्तन करके, आप जिम्मेदारी लेते हैं।

परिवर्तनों को प्रभावी बनाने के लिए, कॉन्फ़िगरेशन के बाद अपने पीसी को पुनरारंभ करना सुनिश्चित करें।

विंडोज़ सेवाएँ जिन्हें मैन्युअल मोड में स्विच किया जा सकता है

इस सूची में कुछ सेवाओं के रूसी नाम उन लोगों से भिन्न हो सकते हैं जिन्हें आप अपने कंप्यूटर पर देखते हैं। लेकिन यह केवल शब्दों पर लागू होता है। यदि आपको वह सेवा उसके सटीक नाम से नहीं मिल रही है जिसकी आपको आवश्यकता है, तो उन विकल्पों की तलाश करें जो अर्थ में समान हों।

विंडोज 10

  • कनेक्टेड उपयोगकर्ताओं और टेलीमेट्री (कनेक्टेड उपयोगकर्ता अनुभव और टेलीमेट्री) के लिए कार्यक्षमता।
  • डायग्नोस्टिक ट्रैकिंग सेवा।
  • dmwappushsvc.
  • डाउनलोड किया गया मैप्स मैनेजर - यदि आप मैप्स एप्लिकेशन का उपयोग नहीं कर रहे हैं।
  • कीबोर्ड और हस्तलेखन पैनल सेवा स्पर्श करें.
  • विंडोज़ डिफ़ेंडर सेवा।

विंडोज़ 8/8.1

  • नैदानिक ​​नीति सेवा.
  • वितरित लिंक ट्रैकिंग क्लाइंट - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • आईपी ​​हेल्पर - यदि आप आईपीवी6 कनेक्शन का उपयोग नहीं कर रहे हैं।
  • कार्यक्रम संगतता सहायक सेवा.
  • स्पूलर प्रिंट करें - यदि आपके पास प्रिंटर नहीं है।
  • रिमोट रजिस्ट्री - इस सेवा को पूरी तरह से अक्षम किया जा सकता है।
  • द्वितीयक लॉगऑन।
  • सुरक्षा केंद्र।
  • TCP/IP (TCP/IP NetBIOS हेल्पर) पर NetBIOS सपोर्ट मॉड्यूल।
  • विंडोज़ त्रुटि रिपोर्टिंग सेवा।
  • विंडोज़ छवि अधिग्रहण (डब्ल्यूआईए) - यदि आपके पास स्कैनर नहीं है।
  • विंडोज़ सर्च - यदि आप विंडोज़ सर्च का उपयोग नहीं करते हैं।

विंडोज 7

  • कंप्यूटर ब्राउज़र - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • नैदानिक ​​नीति सेवा.
  • वितरित लिंक ट्रैकिंग क्लाइंट - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • आईपी ​​हेल्पर - यदि आप आईपीवी6 कनेक्शन का उपयोग नहीं कर रहे हैं।
  • ऑफ़लाइन फ़ाइलें.
  • पोर्टेबल डिवाइस गणनाकर्ता सेवा।
  • स्पूलर प्रिंट करें - यदि आपके पास प्रिंटर नहीं है।
  • संरक्षित भंडारण.
  • रिमोट रजिस्ट्री - इस सेवा को पूरी तरह से अक्षम किया जा सकता है।
  • द्वितीयक लॉगऑन।
  • सुरक्षा केंद्र।
  • सर्वर - यदि कंप्यूटर का उपयोग सर्वर के रूप में नहीं किया जाता है।
  • TCP/IP (TCP/IP NetBIOS हेल्पर) पर NetBIOS सपोर्ट मॉड्यूल।
  • विंडोज़ त्रुटि रिपोर्टिंग सेवा।
  • विंडोज़ सर्च - यदि आप विंडोज़ सर्च का उपयोग नहीं करते हैं।

विंडोज विस्टा

  • कंप्यूटर ब्राउज़र - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • डेस्कटॉप विंडो मैनेजर सत्र प्रबंधक - यदि आप एयरो थीम का उपयोग नहीं कर रहे हैं।
  • नैदानिक ​​नीति सेवा.
  • वितरित लिंक ट्रैकिंग क्लाइंट - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • ऑफ़लाइन फ़ाइलें.
  • पोर्टेबल डिवाइस गणनाकर्ता सेवा।
  • स्पूलर प्रिंट करें - यदि आपके पास प्रिंटर नहीं है।
  • रेडी बूस्ट।
  • रिमोट रजिस्ट्री - इस सेवा को पूरी तरह से अक्षम किया जा सकता है।
  • द्वितीयक लॉगऑन।
  • सुरक्षा केंद्र।
  • सर्वर - यदि कंप्यूटर का उपयोग सर्वर के रूप में नहीं किया जाता है।
  • टेबलेट पीसी इनपुट सेवा।
  • TCP/IP (TCP/IP NetBIOS हेल्पर) पर NetBIOS सपोर्ट मॉड्यूल।
  • थीम्स - यदि आप क्लासिक विंडोज़ थीम का उपयोग कर रहे हैं।
  • विंडोज़ त्रुटि रिपोर्टिंग सेवा।
  • विंडोज़ मीडिया सेंटर सर्विस लॉन्चर।
  • विंडोज़ सर्च - यदि आप विंडोज़ सर्च का उपयोग नहीं करते हैं।

विन्डोज़ एक्सपी

  • सचेतक.
  • कंप्यूटर ब्राउज़र - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • वितरित लिंक ट्रैकिंग क्लाइंट - यदि कंप्यूटर किसी नेटवर्क से कनेक्ट नहीं है।
  • अनुक्रमण सेवा - यदि आप Windows खोज का उपयोग नहीं करते हैं।
  • इंटरनेट फ़ायरवॉल (आईसीएफ)/इंटरनेट कनेक्शन शेयरिंग (आईसीएस)।
  • मैसेंजर सेवा.
  • रिमोट रजिस्ट्री - इस सेवा को पूरी तरह से अक्षम किया जा सकता है।
  • द्वितीयक लॉगऑन।
  • सर्वर - यदि कंप्यूटर का उपयोग सर्वर के रूप में नहीं किया जाता है।
  • सिस्टम पुनर्स्थापना सेवा.
  • TCP/IP (TCP/IP NetBIOS हेल्पर) पर NetBIOS सपोर्ट मॉड्यूल।
  • अबाधित विद्युत आपूर्ति।
  • अपलोड प्रबंधक.
  • वायरलेस कॉन्फ़िगरेशन (वायरलेस शून्य कॉन्फ़िगरेशन)।

अंतिम अद्यतन: 10/31/2015

विंडोज़ ओएस के सबसे महत्वपूर्ण घटकों में से एक सेवाएँ हैं। वास्तव में, ये अलग-अलग एप्लिकेशन हैं जिनमें ग्राफिकल इंटरफ़ेस नहीं है और जो पृष्ठभूमि में विभिन्न कार्य करते हैं। सेवाएँ तब प्रारंभ की जा सकती हैं जब ऑपरेटिंग सिस्टम प्रारंभ होता है, या किसी अन्य समय जब उपयोगकर्ता काम कर रहा हो। सेवाओं का एक सामान्य उदाहरण विभिन्न वेब सर्वर हैं जो पृष्ठभूमि में कनेक्शन के लिए एक विशिष्ट पोर्ट को सुनते हैं, और यदि कनेक्शन हैं, तो वे उनके साथ बातचीत करते हैं। यह अन्य स्थापित प्रोग्रामों के लिए विभिन्न सहायक अद्यतन सेवाएँ भी हो सकती हैं जो यह पता लगाने के लिए सर्वर से संपर्क करती हैं कि एप्लिकेशन का कोई नया संस्करण है या नहीं। सामान्य तौर पर, हम सेवा पैनल खोल सकते हैं और सभी स्थापित और चल रही सेवाओं को स्वयं देख सकते हैं:

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

सबसे पहले, एक नया प्रोजेक्ट बनाते हैं, जो Windows Service प्रकार का होगा। चलिए प्रोजेक्ट को FileWatcherService कहते हैं:

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

तो नया प्रोजेक्ट इस तरह दिखता है:

एक फ़ाइल प्रोग्राम.cs भी है और वास्तविक सेवा नोड Service1.cs भी है।

सेवा एक सामान्य एप्लिकेशन का प्रतिनिधित्व करती है, लेकिन यह अपने आप प्रारंभ नहीं होती है। सभी कॉल और उस तक पहुंच सेवा नियंत्रण प्रबंधक (सेवा नियंत्रण प्रबंधक या एससीएम) के माध्यम से जाती है। जब कोई सेवा सिस्टम स्टार्टअप पर या मैन्युअल रूप से स्वचालित रूप से प्रारंभ होती है, तो SCM प्रोग्राम क्लास में मुख्य विधि को कॉल करता है:

स्टेटिक क्लास प्रोग्राम (स्थैतिक शून्य मुख्य() ( ServiceBase ServicesToRun; ServicesToRun = new ServiceBase ( new Service1() ); ServiceBase.Run(ServicesToRun); ) )

एक साथ कई सेवाओं को चलाने के लिए मुख्य विधि को डिफ़ॉल्ट रूप से परिभाषित किया गया है, जिसे ServicesToRun सरणी में परिभाषित किया गया है। हालाँकि, डिफ़ॉल्ट रूप से प्रोजेक्ट में केवल एक सेवा, Service1 शामिल है। लॉन्च स्वयं रन विधि का उपयोग करके किया जाता है: ServiceBase.Run(ServicesToRun) ।

प्रारंभ की जा रही सेवा Service1.cs नोड द्वारा दर्शायी जाती है। हालाँकि, यह वास्तव में एक साधारण कोड फ़ाइल नहीं है। यदि हम इस नोड को खोलते हैं, तो हमें सेवा डिज़ाइनर फ़ाइल Service1.Designer.cs और Service1 वर्ग दिखाई देगा।

Service1 वर्ग वास्तव में सेवा का प्रतिनिधित्व करता है। डिफ़ॉल्ट रूप से इसमें निम्नलिखित कोड है:

सिस्टम का उपयोग करना; System.Collections.Generic का उपयोग करना; System.ComponentModel का उपयोग करना; System.Data का उपयोग करना; System.Diagnostics का उपयोग करना; System.Linq का उपयोग करना; System.ServiceProcess का उपयोग करना; System.Text का उपयोग करना; System.Threading.Tasks का उपयोग करना; नेमस्पेस FileWatcherService (सार्वजनिक आंशिक वर्ग Service1: ServiceBase (public Service1() ( InitializeComponent(); ) संरक्षित ओवरराइड शून्य OnStart(स्ट्रिंग आर्ग्स) ( ) संरक्षित ओवरराइड शून्य OnStop() ( ) ) )

सर्विस क्लास को सर्विसबेस बेस क्लास से इनहेरिट होना चाहिए। यह वर्ग कई तरीकों को परिभाषित करता है, जिनमें से सबसे महत्वपूर्ण हैं ऑनस्टार्ट () विधि, जो सेवा द्वारा किए गए कार्यों को शुरू करती है, और ऑनस्टॉप () विधि, जो सेवा को रोकती है।

एससीएम मुख्य विधि को कॉल करने और सेवा को पंजीकृत करने के बाद, इसे सीधे ऑनस्टार्ट विधि चलाकर कॉल किया जाता है।

जब हम सर्विस कंसोल में या कमांड लाइन के माध्यम से किसी सेवा को रोकने के लिए एक कमांड भेजते हैं, तो एससीएम इसे रोकने के लिए ऑनस्टॉप विधि को कॉल करता है।

सर्विस क्लास में इन दो तरीकों के अलावा, आप सर्विसबेस बेस क्लास के कई और तरीकों को ओवरराइड कर सकते हैं:

    ऑनपॉज़: सेवा रुकने पर कॉल किया जाता है

    जारी रखें: जब कोई सेवा निलंबित होने के बाद फिर से शुरू होती है तो कॉल किया जाता है

    ऑनशटडाउन: विंडोज़ बंद होने पर कॉल किया जाता है

    OnPowerEvent: पावर मोड बदलने पर कॉल किया जाता है

    OnCustomCommand: जब किसी सेवा को सेवा नियंत्रण प्रबंधक (SCM) से एक कस्टम कमांड प्राप्त होता है तो कॉल किया जाता है

Service1 क्लास के कंस्ट्रक्टर में, InitializeComponent() विधि को कॉल किया जाता है, जिसे डिज़ाइनर फ़ाइल Service1.Designer.cs में परिभाषित किया गया है:

नेमस्पेस FileWatcherService (आंशिक वर्ग Service1 (निजी System.ComponentModel.IContainer घटक = शून्य; संरक्षित ओवरराइड शून्य निपटान (बूल निपटान) (यदि (निपटान && (घटक! = शून्य)) (घटक। निपटान (); ) आधार। निपटान (निपटान) ); ) निजी शून्य इनिशियलाइज़ कॉम्पोनेंट() (घटक = नया सिस्टम.कंपोनेंटमॉडल.कंटेनर(); यह.सेवानाम = "सेवा1"; ) )

इसमें ध्यान देने योग्य एकमात्र चीज़ सेवा का नाम (ServiceName प्रॉपर्टी) सेट करना है:

This.ServiceName = "Service1";

यह वह नाम है जो इस सेवा को स्थापित करने के बाद सेवा कंसोल में प्रदर्शित किया जाएगा। हम इसे बदल सकते हैं, या हम इसे वैसे ही छोड़ सकते हैं जैसे यह है।

अब सेवा कोड को इस प्रकार बदलें:

सिस्टम का उपयोग करना; System.ServiceProcess का उपयोग करना; System.IO का उपयोग करना; System.Threading का उपयोग करना; नेमस्पेस FileWatcherService (सार्वजनिक आंशिक वर्ग Service1: ServiceBase (Logger logger; public Service1() ( InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; ) संरक्षित ओवरराइड शून्य ऑनस्टार्ट (स्ट्रिंग आर्ग्स) ( लॉगर = नया लॉगर थ्रेड = नया थ्रेड (नया थ्रेडस्टार्ट (लॉगर.स्टार्ट)); लॉगर थ्रेड.स्टार्ट() ( लॉगर.स्टॉप(); थ्रेड.स्लीप(1000); ) क्लास लॉगर (फ़ाइलसिस्टमवॉचर वॉचर; ऑब्जेक्ट ओबीजे = नया ऑब्जेक्ट(); बूल सक्षम = सत्य; सार्वजनिक लॉगर() (वॉकर = नया फ़ाइलसिस्टमवॉचर('डी:\\टेम्प'); वॉचर.डिलीटेड += वॉचर_डिलीटेड; वॉचर.क्रिएटेड + = द्रष्टा_निर्मित; द्रष्टा.परिवर्तित += द्रष्टा.नाम बदला += द्रष्टा_नाम बदला; ) सार्वजनिक शून्य प्रारंभ() ( द्रष्टा.EnableRaisingEvents = सत्य; जबकि(सक्षम) ( थ्रेड.स्लीप(1000); ) ) सार्वजनिक शून्य रोक() ( द्रष्टा.EnableRaisingEvents = गलत; सक्षम = गलत; ) // फ़ाइलों का नाम बदलना निजी शून्य वॉचर_रनामा (ऑब्जेक्ट प्रेषक, RenamedEventArgs e) (स्ट्रिंग फ़ाइलइवेंट = "नाम बदला गया" + e.FullPath; स्ट्रिंग फ़ाइलपाथ = e.OldFullPath; रिकॉर्डएंट्री(फाइलइवेंट, फाइलपाथ); ) // फ़ाइलें बदलना निजी शून्य वॉचर_चेंज्ड (ऑब्जेक्ट प्रेषक, फ़ाइल सिस्टमइवेंटआर्ग्स ई) (स्ट्रिंग फ़ाइलइवेंट = "बदला हुआ"; स्ट्रिंग फ़ाइलपाथ = ई.फुलपाथ; रिकॉर्डएंट्री(फ़ाइलइवेंट, फ़ाइलपैथ); ) // फ़ाइलें बनाना निजी शून्य वॉचर_क्रिएटेड(ऑब्जेक्ट प्रेषक, फ़ाइलसिस्टमइवेंटआर्ग्स) ई) (स्ट्रिंग फाइलइवेंट = "बनाया गया"; स्ट्रिंग फाइलपाथ = ई.फुलपाथ; रिकॉर्डएंट्री(फाइलइवेंट, फाइलपाथ); ) // फाइलों को हटाना निजी शून्य वॉचर_डिलीटेड (ऑब्जेक्ट प्रेषक, फाइलसिस्टमइवेंटआर्ग ई) (स्ट्रिंग फाइलइवेंट = "डिलीट"; स्ट्रिंग फाइलपाथ = e.FullPath; रिकॉर्डएंट्री (फाइलइवेंट, फाइलपाथ); निजी शून्य रिकॉर्डएंट्री (स्ट्रिंग फाइलइवेंट, स्ट्रिंग फाइलपाथ) (लॉक (ओबीजे) (स्ट्रीमराइटर लेखक = नया स्ट्रीमवाइटर ("डी:\\templog.txt", सच)) (लेखक) .WriteLine(String.Format("(0) फ़ाइल (1) था (2)", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), filePath, fileEvent()); ; ) ) ) )

मुख्य वर्ग जो सभी कार्यक्षमताओं को समाहित करता है वह लॉगर वर्ग है। FileSystemWatcher ऑब्जेक्ट का उपयोग करके, यह फ़ोल्डर में परिवर्तनों की निगरानी करेगा DTE सांसद. स्टार्ट() विधि निर्दिष्ट करती है कि हम FileSystemWatcher ऑब्जेक्ट के माध्यम से परिवर्तनों पर नज़र रखेंगे। और सभी कार्य तब तक जारी रहेंगे जब तक सक्षम बूलियन वैरिएबल सत्य है। और स्टॉप() विधि कक्षा को समाप्त करने की अनुमति देगी।

FileSystemWatcher ईवेंट आपको देखे गए फ़ोल्डर में सभी परिवर्तनों की निगरानी करने की अनुमति देते हैं। यह templog.txt फ़ाइल में परिवर्तन रिकॉर्ड करेगा। Templog.txt फ़ाइल के लिए संसाधन दौड़ से बचने के लिए, जिसमें परिवर्तन रिकॉर्ड किए जाते हैं, रिकॉर्डिंग प्रक्रिया को लॉक (ओबीजे) स्टब द्वारा अवरुद्ध कर दिया जाता है।

परिणामस्वरूप, बनाने, बदलने, नाम बदलने और हटाने के बाद, लॉग फ़ाइल में कुछ इस तरह होगा:

07/30/2015 12:15:40 फ़ाइल D:\Temp\New text document.txt बनाया गया था 07/30/2015 12:15:46 फ़ाइल D:\Temp\New text document.txt का नाम बदलकर D:\ कर दिया गया Temp\hello.txt 07/30/2015 12:15:55 फ़ाइल D:\Temp\hello.txt को 07/30/2015 12:15:55 फ़ाइल D:\Temp\hello.txt को 07/30 को संशोधित किया गया था /2015 12:16:01 फ़ाइल D: \Temp\hello.txt हटा दिया गया है

Service1 सेवा वर्ग में ही, कंस्ट्रक्टर में कई विकल्प सेट किए गए हैं:

यह.CanStop = सत्य; // सेवा को इससे रोका जा सकता है.CanPauseAndContinue = true; // सेवा को रोका जा सकता है और फिर इसे जारी रखा जा सकता है। ऑटोलॉग = सत्य; // सेवा लॉग में लिख सकती है

ऑनस्टार्ट() विधि में, लॉगर ऑब्जेक्ट को शुरू करने के लिए एक नया थ्रेड कहा जाता है:

संरक्षित ओवरराइड शून्य ऑनस्टार्ट (स्ट्रिंग आर्ग्स) (लॉगर = नया लॉगर(); थ्रेड लॉगरथ्रेड = नया थ्रेड (नया थ्रेडस्टार्ट (लॉगर.स्टार्ट)); लॉगरथ्रेड.स्टार्ट(); )

नए थ्रेड की आवश्यकता है क्योंकि वर्तमान थ्रेड केवल एससीएम कमांड को संसाधित करता है और जितनी जल्दी हो सके ऑनस्टार्ट विधि से वापस आना चाहिए।

जब एससीएम से सेवा को रोकने के लिए एक आदेश प्राप्त होता है, तो ऑनस्टॉप विधि ट्रिगर हो जाती है, जो लॉगर.स्टॉप() विधि को कॉल करती है। अतिरिक्त विलंब लकड़हारा थ्रेड को रुकने की अनुमति देगा:

संरक्षित ओवरराइड शून्य ऑनस्टॉप() ( लॉगर.स्टॉप(); थ्रेड.स्लीप(1000); )

हालाँकि, सेवा वर्ग ही पर्याप्त नहीं है। हमें एक सर्विस इंस्टॉलर भी बनाना होगा.

सॉफ़्टवेयर अनुकूलता के दृष्टिकोण से। इसलिए यह स्वाभाविक है कि हम विंडोज 7 के संदर्भ में सेवाओं पर चर्चा करने के लिए वापस आएं। लेकिन इस बार हम विंडोज 7 में उपलब्ध सेवाओं को अनुकूलित करने के कुछ लाभों के बारे में बात करेंगे। यह लेख विंडोज 7 में एक नई सुविधा के बारे में है - ट्रिगर प्रारंभ सेवाएँ. लेकिन इससे पहले कि हम एपीआई पर नज़र डालें, आइए सेवाओं की बड़ी तस्वीर पर एक नज़र डालें।

सेवाएँ क्या हैं?

सेवा विंडोज़ ऑपरेटिंग सिस्टम में निर्मित एक आंतरिक तंत्र है। आप सेवाओं को विशेष अनुप्रयोगों के रूप में सोच सकते हैं जो वर्तमान उपयोगकर्ता संदर्भ की परवाह किए बिना चलते हैं। सेवाएँ नियमित अनुप्रयोगों से इस मायने में भिन्न होती हैं कि उन्हें उपयोगकर्ता की उपस्थिति की आवश्यकता के बिना, सिस्टम चालू होने (बूट होने) से लेकर बंद होने तक संचालित करने के लिए कॉन्फ़िगर किया जा सकता है। यानी, उपयोगकर्ता के लॉग इन न होने पर भी सेवाएँ चल सकती हैं।

हम सेवाओं को ऐसे चालू कार्यों के रूप में सोचना पसंद करते हैं जो पृष्ठभूमि में चलते हैं और उपयोगकर्ता संचालन को प्रभावित नहीं करते हैं। विंडोज़ में सेवाएँ रिमोट प्रोसीजर कॉल (आरपीसी), प्रिंटर स्पूलर से लेकर नेटवर्क लोकेशन अवेयरनेस तक सभी प्रकार की पृष्ठभूमि गतिविधि के लिए जिम्मेदार हैं।

पिछले कुछ वर्षों में, विंडोज़ बढ़ी है और सेवाओं की संख्या भी बढ़ी है। आइए ईमानदार रहें, विंडोज़ में पृष्ठभूमि सेवाएँ थोड़ी कष्टकारी हैं - ऑपरेटिंग सिस्टम बॉक्स से बाहर बहुत सारी सेवाएँ लेकर आता है। इसके अलावा, स्वतंत्र सॉफ़्टवेयर डेवलपर (आईएसवी) और उनके एप्लिकेशन और भी अधिक सेवाएँ जोड़ रहे हैं। उदाहरण के लिए, सॉफ़्टवेयर अद्यतन सेवाएँ। हालाँकि, कुछ सेवाएँ महत्वपूर्ण हैं और बूट प्रक्रिया के दौरान आवश्यक होती हैं, जबकि अन्य की आवश्यकता बाद में होती है जब कोई विशिष्ट उपयोगकर्ता लॉग इन करता है, और अन्य को तब तक शुरू करने की आवश्यकता नहीं होती जब तक कि उन्हें कॉल न किया जाए। इसके बावजूद, जब आप वर्तमान में चल रही सेवाओं की सूची देखते हैं, तो आपको कई वस्तुएं दिखाई देती हैं जिन्हें 24x7 काम करने की आवश्यकता नहीं होती है।

उन सेवाओं में क्या खराबी है जो दिन के 24 घंटे, सप्ताह के 7 दिन संचालित होती हैं?

24x7 सेवाओं से जुड़ी कई समस्याएं हैं। सबसे पहले, यदि कोई चीज़ आवश्यक नहीं है तो उसे (पृष्ठभूमि में भी) क्यों चलना चाहिए? कोई भी चल रही प्रक्रिया (सेवाओं सहित) बहुमूल्य मेमोरी और सीपीयू संसाधनों का उपयोग करती है जिनका उपयोग अन्य अनुप्रयोगों और सेवाओं के लिए किया जा सकता है। यदि आप एक निश्चित समय पर चल रही सभी सेवाओं की गिनती करते हैं, तो वे महत्वपूर्ण मात्रा में मेमोरी, हैंडल, थ्रेड और सीपीयू उपयोग जोड़ते हैं। ये सभी "बर्बाद" संसाधन कंप्यूटर के समग्र प्रदर्शन को कम करते हैं, इसकी प्रतिक्रियाशीलता को कम करते हैं, और कंप्यूटर को सुस्त और धीमा दिखाते हैं। इसके अलावा, चूंकि कई सेवाएं स्वचालित रूप से शुरू होने के लिए कॉन्फ़िगर की गई हैं (सिस्टम शुरू होने पर काम करना शुरू करें), वे कंप्यूटर के बूट समय को प्रभावित करते हैं।

दूसरे, इन बर्बाद संसाधनों का ऊर्जा खपत पर सीधा प्रभाव पड़ता है। सीपीयू पर जितना अधिक लोड होगा, कंप्यूटर उतनी अधिक बिजली की खपत करेगा। यह लैपटॉप पर महत्वपूर्ण हो सकता है और बैटरी जीवन को कई घंटों तक कम कर सकता है।

तीसरा, लगातार अनुत्पादक सॉफ़्टवेयर चलाने से मेमोरी लीक और समग्र सिस्टम अस्थिरता हो सकती है। इससे एप्लिकेशन और अंततः कंप्यूटर विफल हो जाता है।

अंत में, यदि सेवा 24x7 संचालित होती है, और यदि यह एक प्रसिद्ध सेवा है (जो कि हर लोकप्रिय एप्लिकेशन के पास हो सकती है, जैसे कि पीडीएफ रीडर), तो यह एक बड़ी हमले की सतह बनाती है। एक हमलावर इस जानकारी का उपयोग कर सकता है कि एक निश्चित लोकप्रिय एप्लिकेशन 24x7 सेवा स्थापित करता है और कंप्यूटर तक पहुंच प्राप्त करने के लिए इसे हैक करने का प्रयास कर सकता है।

इतना कहने के बाद, आप सोच रहे होंगे कि इतने सारे डेवलपर्स ने अपनी सेवाओं को हर समय चलाने के लिए क्यों सेट किया है, अगर उनके पास कोई अन्य विकल्प है। विंडोज़ 7 से पहले भी, सेवाएँ शुरू करने के लिए कई विकल्प उपलब्ध थे:

  • अक्षमकिसी सेवा को पूरी तरह से अक्षम कर देता है और उसे तथा उस पर निर्भर सेवाओं को प्रारंभ होने से रोकता है - जिसका अर्थ है कि उपयोगकर्ता को नियंत्रण कक्ष या कमांड प्रॉम्प्ट से सेवा को मैन्युअल रूप से सक्षम करना होगा
  • नियमावलीएक सेवा आवश्यकतानुसार शुरू होती है (अन्य सेवाओं की निर्भरता के कारण) या जब सेवा को उपयुक्त एपीआई का उपयोग करके एप्लिकेशन से कॉल किया जाता है, जैसा कि नीचे दिखाया जाएगा
  • स्वचालितलॉगिन करने पर एक सेवा शुरू होती है
  • स्वचालित विलंबित- विंडोज़ विस्टा में एक नए प्रकार का स्टार्टअप पेश किया गया, जिसके साथ बूट पूरा होने और प्रारंभिक संचालन पूरा होने के बाद सेवा शुरू होती है, जो सिस्टम स्टार्टअप को गति देती है।

दुर्भाग्य से, कई आईएसवी (स्वयं माइक्रोसॉफ्ट सहित) अपनी सेवाओं को स्वचालित या स्वचालित विलंबित पर सेट करना जारी रखते हैं क्योंकि यह सभी के लिए सबसे सरल समाधान लगता है। सेवा बस 24x7 चलती है और हमेशा उपलब्ध रहती है, जिससे निर्भरता या सेवा चल रही है या नहीं इसकी जांच करने की कोई आवश्यकता नहीं होती है।

मौजूदा सेवाओं के ऐसे कई उदाहरण हैं जो बहुत कम संसाधनों का उपयोग कर सकते हैं और 24x7 काम किए बिना अधिक सुरक्षित बन सकते हैं। उदाहरण के लिए, एक अद्यतन सेवा के बारे में सोचें जो किसी एप्लिकेशन में नए अपडेट की जाँच करती है। यदि कंप्यूटर नेटवर्क से कनेक्ट नहीं है और उसके पास आईपी एड्रेस नहीं है, तो उसे काम क्यों करना चाहिए? यह कुछ नहीं कर सकता, तो ऐसे प्रोग्राम को चालू क्यों छोड़ें जो कुछ नहीं करता? नीति प्रबंधन सेवा के बारे में सोचें, जिसका उपयोग समूह नीतियों को बदलते समय या जब कोई कंप्यूटर किसी डोमेन से जुड़ता है या छोड़ता है, तो किया जाता है, लेकिन अब जब कंप्यूटर मेरे होम नेटवर्क से जुड़ा है, तो सेवा फिर से खाली चलती है।

ट्रिगर-आधारित सेवाओं का उद्भव

उपरोक्त समस्याओं का समाधान सेवा को "हमेशा चालू स्थिति" से बाहर अन्य प्रकार की पृष्ठभूमि गतिविधि, जैसे निर्धारित कार्यों या ट्रिगर सेवाओं में स्थानांतरित करना है। यह आलेख विंडोज 7 ट्रिगर स्टार्ट सर्विसेज के बारे में है। विंडोज 7 शेड्यूल्ड टास्क के बारे में बहुत सी दिलचस्प बातें कही जा सकती हैं, जो बाद के लेखों में बताई जाएंगी।

क्या क्लाइंट एप्लिकेशन को सेवा के रूप में चलाना संभव है? प्रत्येक कंसोल एप्लिकेशन एक सेवा के रूप में चलने में सक्षम नहीं होगा, और ग्राफ़िकल इंटरफ़ेस वाले प्रोग्राम, सिद्धांत रूप में, इस तरह से काम नहीं कर सकते हैं। लेकिन एप्लिकेशन को एक सेवा के रूप में चलाना अभी भी संभव है, और मूल नाम वाला एक प्रोग्राम इसमें हमारी मदद करेगा गैर-चूसनेवाला सेवा प्रबंधक.

एनएसएसएम मुफ़्त और खुला स्रोत सॉफ़्टवेयर है और सभी ऑपरेटिंग सिस्टम का समर्थन करता है माइक्रोसॉफ्ट, विंडोज़ 2000 से शुरू होकर . एनएसएसएम को इंस्टॉलेशन की आवश्यकता नहीं है, बस इसे डाउनलोड करें और अनपैक करें। वितरण में 32- और 64-बिट ऑपरेटिंग सिस्टम के संस्करण शामिल हैं। आप प्रोग्राम को nssm.cc वेबसाइट से प्राप्त कर सकते हैं, फिलहाल नवीनतम स्थिर संस्करण 2.21.1 है, जिसका मैं उपयोग करूंगा।

एनएसएसएम की क्षमताओं को प्रदर्शित करने के लिए, आइए नोटपैड को एक सेवा के रूप में चलाने का प्रयास करें।

एक सेवा बनाना

नाम की एक सेवा बनाने के लिए नोटपैडकमांड कंसोल लॉन्च करें, अनपैक्ड एनएसएसएम (64-बिट विंडोज के लिए) वाले फ़ोल्डर में जाएं और एनएसएसएम इंस्टॉल नोटपैड कमांड दर्ज करें, जो एनएसएसएम ग्राफिकल इंस्टॉलर विंडो खोलता है। एक सेवा बनाने के लिए, बस पथ फ़ील्ड में निष्पादन योग्य फ़ाइल का पथ निर्दिष्ट करें और "सेवा स्थापित करें" बटन पर क्लिक करें। इसके अतिरिक्त, विकल्प फ़ील्ड में आप सेवा शुरू करने के लिए आवश्यक कुंजियाँ निर्दिष्ट कर सकते हैं।

नई सेवा बनाते समय आप कुछ अतिरिक्त पैरामीटर भी निर्दिष्ट कर सकते हैं।

"शटडाउन" टैब उन शटडाउन विधियों और टाइमआउट को सूचीबद्ध करता है जिनका उपयोग तब किया जाता है जब एप्लिकेशन सामान्य रूप से बंद हो जाता है या क्रैश हो जाता है। जब एनएसएसएम को स्टॉप कमांड प्राप्त होता है (उदाहरण के लिए, जब कोई एप्लिकेशन बंद हो जाता है), तो यह नियंत्रित एप्लिकेशन को सामान्य तरीके से रोकने का प्रयास करता है। यदि एप्लिकेशन प्रतिक्रिया नहीं देता है, तो एनएसएसएम इस एप्लिकेशन की सभी प्रक्रियाओं और उपप्रक्रियाओं को बलपूर्वक समाप्त कर सकता है।

एप्लिकेशन को बंद करने के चार चरण हैं, और डिफ़ॉल्ट रूप से उनका उपयोग इस क्रम में किया जाएगा:

पहले चरण में, NSSM एक इवेंट जेनरेट करने और भेजने का प्रयास करता है Ctrl+C.यह विधि कंसोल अनुप्रयोगों या स्क्रिप्ट के लिए अच्छी तरह से काम करती है, लेकिन ग्राफिकल अनुप्रयोगों के लिए लागू नहीं है;
NSSM तब एप्लिकेशन द्वारा बनाई गई सभी विंडो का पता लगाता है और उन्हें WM_CLOSE संदेश भेजता है, जिससे एप्लिकेशन बाहर निकल जाता है;
तीसरा चरण यह है कि एनएसएसएम एप्लिकेशन द्वारा बनाए गए सभी थ्रेड्स की गणना करता है और उन्हें एक WM_QUIT संदेश भेजता है, जो तब प्राप्त होगा जब एप्लिकेशन में थ्रेड संदेश कतार हो;
अंतिम उपाय के रूप में, एनएसएसएम टर्मिनेटप्रोसेस() विधि को कॉल कर सकता है, जिससे एप्लिकेशन को समाप्त करना पड़ सकता है।

कुछ या यहां तक ​​कि सभी तरीकों को अक्षम करना संभव है, लेकिन अलग-अलग एप्लिकेशन के लिए अलग-अलग तरीके काम करते हैं और यह सुनिश्चित करने के लिए कि एप्लिकेशन सही ढंग से बंद हो जाए, सब कुछ वैसे ही छोड़ने की सिफारिश की जाती है।

डिफ़ॉल्ट रूप से, जब कोई सेवा क्रैश हो जाती है, तो एनएसएसएम उसे पुनः आरंभ करने का प्रयास करता है। "एक्ज़िट एक्शन" टैब पर, आप एप्लिकेशन के असामान्य रूप से समाप्त होने पर स्वचालित कार्रवाई को बदल सकते हैं, साथ ही एप्लिकेशन के स्वचालित रूप से पुनरारंभ होने से पहले देरी भी सेट कर सकते हैं।

"इनपुट/आउटपुट (आई/ओ)" टैब पर, आप किसी निर्दिष्ट फ़ाइल में एप्लिकेशन इनपुट/आउटपुट का पुनर्निर्देशन सेट कर सकते हैं।

"पर्यावरण" टैब पर, आप सेवा के लिए नए पर्यावरण चर सेट कर सकते हैं, या मौजूदा को ओवरराइड कर सकते हैं।

आप ग्राफिकल शेल का उपयोग भी नहीं कर सकते हैं और निम्नलिखित कमांड के साथ तुरंत कंसोल में एक सेवा बना सकते हैं:

एनएसएसएम नोटपैड स्थापित करें ″C:\Windows\system32\notepad.exe″

सेवा प्रबंधन

एनएसएसएम का उपयोग करके सेवा बनाने के बाद, सर्विसेज स्नैप-इन पर जाएं और नोटपैड सेवा ढूंढें। जैसा कि आप देख सकते हैं, दिखने में यह अन्य सेवाओं से अलग नहीं है, हम इसे शुरू भी कर सकते हैं, रोक भी सकते हैं, या लॉन्च मोड भी बदल सकते हैं। हालाँकि, ध्यान दें कि nssm.exe निष्पादन योग्य फ़ाइल के रूप में सूचीबद्ध है।

और यदि हम टास्क मैनेजर में जाते हैं, तो हम निम्नलिखित चित्र देखेंगे: एनएसएसएम मुख्य (मूल) प्रक्रिया के रूप में चल रहा है, नोटपैड सेवा इसकी चाइल्ड प्रक्रिया के रूप में चल रही है, और नोटपैड एप्लिकेशन पहले से ही इस चाइल्ड प्रक्रिया में चल रहा है।

किसी सेवा को हटाया जा रहा है

किसी सेवा को हटाने के लिए, एनएसएसएम रिमूव नोटपैड कमांड दर्ज करें और इसके हटाने की पुष्टि करें। और कमांड एनएसएसएम रिमूव नोटपैड कन्फर्म दर्ज करके, आप पुष्टि के बिना कर सकते हैं।

इंटरैक्टिव ढंग से एक सेवा प्रारंभ करें

उपयोगकर्ता एप्लिकेशन और सेवा के बीच मुख्य अंतर यह है कि, एक बार लॉन्च होने के बाद, एप्लिकेशन को चलते रहने के लिए उपयोगकर्ता से अतिरिक्त कार्रवाइयों की आवश्यकता हो सकती है - उदाहरण के लिए, एक बटन दबाना या एक कमांड दर्ज करना। ऐसा करने के लिए, आपको उस तक पहुंच प्राप्त करने की आवश्यकता है, जो, जैसा कि यह पता चला है, करना इतना आसान नहीं है।

किसी सेवा को इंटरैक्टिव मोड में शुरू करने के लिए, आपको सेवा स्नैप-इन में इसके गुणों को खोलना होगा और "लॉगिन" टैब पर, "डेस्कटॉप के साथ इंटरैक्शन की अनुमति दें" चेकबॉक्स को चेक करना होगा।

और फिर चमत्कार शुरू होते हैं। इंटरैक्टिव मोड में चलने वाली सेवा के लिए, सिस्टम एक अलग पृथक सत्र (सत्र 0) खोलता है। इस सत्र को केवल इंटरएक्टिव सर्विसेज डिटेक्शन सर्विस (यूआई0डिटेक्ट) का उपयोग करके एक्सेस किया जा सकता है, जो कंप्यूटर पर इंटरैक्टिव सेवाओं के स्टार्टअप की निगरानी करता है और अलर्ट जारी करता है। Windows 7\Server 2008 में यह सेवा डिफ़ॉल्ट रूप से सक्रिय है, लेकिन Windows 8\Server 2012 में यह अक्षम है और सेवा ग्राफ़िकल स्नैप-इन में दिखाई नहीं देती है (कम से कम मुझे यह वहां नहीं मिली)। इसके अलावा, यदि आपको यह रहस्यमय सेवा मिलती है और इसे शुरू करने का प्रयास करते हैं, तो आपको एक त्रुटि संदेश प्राप्त होगा।

लेकिन तथ्य यह है कि इसे चलाने के लिए आपको अपने कंप्यूटर पर इंटरैक्टिव सेवाओं को चलने की अनुमति देनी होगी। इसलिए, रजिस्ट्री संपादक खोलें, HKLM\System\CurrentControlSet\Control\Windows अनुभाग में एक DWORD प्रकार पैरामीटर ढूंढें कोई इंटरैक्टिव सेवाएँ नहींऔर इसका मान सेट करें 0 .

फिर पॉवरशेल कंसोल खोलें और कमांड के साथ डिस्कवरी सेवा शुरू करें:

प्रारंभ-सेवा-नाम ui0detect

यह सुनिश्चित करने के बाद कि डिटेक्शन सेवा चल रही है, हम नोटपैड सेवा को पुनरारंभ करते हैं, और हमें यह विंडो मिलती है। "संदेश देखें" चुनें

और हम स्वयं को शून्य सत्र में पाते हैं जिसमें हमारा एप्लिकेशन चलता है। फिर हम इसके साथ आवश्यक कार्रवाई करते हैं और वापस लौट आते हैं।

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

क्या आपको लेख पसंद आया? अपने दोस्तों के साथ साझा करें!
क्या यह लेख सहायक था?
हाँ
नहीं
आपकी प्रतिक्रिया के लिए धन्यवाद!
कुछ ग़लत हो गया और आपका वोट नहीं गिना गया.
धन्यवाद। आपका संदेश भेज दिया गया है
पाठ में कोई त्रुटि मिली?
इसे चुनें, क्लिक करें Ctrl + Enterऔर हम सब कुछ ठीक कर देंगे!