2011-07-02 12 views
5

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

यह विंडोज सेवा एक डब्ल्यूसीएफ सेवा के माध्यम से एक वेब ऐप द्वारा नियंत्रित है - विंडोज सेवा एक डब्ल्यूसीएफ सेवा चलाती है, और वेब ऐप उस डब्ल्यूसीएफ सेवा से जुड़ता है। डब्ल्यूसीएफ सेवा निर्यात विधियों जैसे Restart(int id) और Stop(int id)

  • जब एक प्रक्रिया अनपेक्षित रूप से बंद (उदाहरण के लिए, एक आंतरिक त्रुटि के कारण), सेवा कुछ डेटाबेस में एक मूल्य के अद्यतन करना चाहिए:

    मैं कई प्रश्न हैं। अभी, ऐसा करने के लिए, मेरे पास सिर्फ एक धागा है कि प्रत्येक 30 सेकंड में यह जांचता है कि प्रक्रिया चल रही है या नहीं।

    क्या यह करने का अधिकार है? क्या मुझे Exit ईवेंट का उपयोग करना चाहिए?

  • जब सेवा बंद कर देता है, किसी भी कारण सभी प्रक्रियाओं है कि यह कहना है भी बंद करेगा के लिए। ऐसा करने का सही तरीका क्या है?

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

  • मुझे प्रत्येक कार्य का प्रतिनिधित्व कैसे करना चाहिए (उदाहरण के लिए - प्रक्रिया को पुनरारंभ करें या प्रक्रिया को रोकें)?

    अभी मैं System.Threading.Tasks का उपयोग कर रहा हूं। क्या यह सही तरीका है?

यह सेवा न्यूनतम गलतियों के साथ अत्यधिक स्केलेबल होना चाहिए।

धन्यवाद।

+4

ऐसा लगता है जैसे आप Windows सेवा नियंत्रण प्रबंधक को पुन: पेश कर रहे हैं? –

+1

एससीएम के साथ समस्या यह है कि यह विस्तार योग्य नहीं है। मेरी सेवा में, मेरे पास कस्टम विधियां भी हैं, न केवल 'पुनरारंभ करें' और 'स्टॉप'। –

+1

फिर बस एक कस्टम ऐप लिखें। उन संदेशों को एससीएम होस्टेड प्रक्रिया में भेजने के लिए। विंडोज सेवाएं इस मॉडल का समर्थन करती हैं। –

उत्तर

0

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

  1. एक छोटा प्रोग्राम लिखें जो उन प्रक्रियाओं को बंद कर सकता है जिन्हें आप बंद करना चाहते हैं।
  2. सेवा नियंत्रण प्रबंधक पर जाएं और अपनी सेवा पर राइट क्लिक करें।
  3. रिकवरी टैब पर जाएं और पहले विफलता, द्वितीय विफलता और बाद में विफलता सूची बॉक्स के तहत निष्पादन के लिए अपना प्रोग्राम निर्दिष्ट करें।

आशा है कि इससे मदद मिलेगी।

संबंधित मुद्दे