2010-10-26 17 views
8

से पहले एक विंडोज सेवा सुनिश्चित करेगा, मैंने एक एप्लिकेशन बनाया है जो विंडोज सेवा के रूप में चल रहा है और मेरे कोड के माध्यम से स्थापित है।लॉगऑन

लॉगऑन को छोड़कर सभी ठीक है।

पहली विंडो xp/2003 सर्वर लॉगऑन स्क्रीन पर, मुझे यकीन नहीं है कि सेवा बिल्कुल चल रही है या नहीं। यदि ऐसा है, तो यह काम करता है क्योंकि यह कार्यात्मक नहीं है (सेवा WINPCAP का उपयोग कर रही है ताकि यह एक मुद्दा हो)।

सेवा सेटिंग्स "डेस्कटॉप के साथ बातचीत" पर सेट हैं और सिस्टम के रूप में चलती हैं।

मैं कैसे सुनिश्चित कर सकता हूं कि सेवा विंडोज लॉगऑन से पहले शुरू हो जाएगी? मैं लॉग ऑफ करने के बाद भी यह सुनिश्चित कर सकता हूं कि यह चल रहा है?

उत्तर

3

विचार करने के लिए कुछ मुद्दे हैं।

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

  2. ऐसा हो सकता है कि WinPcap समस्या का हिस्सा है। एक सेवा में WinPcap का उपयोग करने के लिए कुछ सुनहरे नियम हैं।

    1 ए) आपकी सेवा को ऐसा कुछ भी नहीं करना चाहिए जो WinPcap सेवा को शुरू करने का प्रयास कर सकता है, जबकि आपकी स्वयं की सेवा शुरू हो रही है क्योंकि इससे विंडोज सर्विस कंट्रोल मैनेजर में डेडलॉक हो जाएगा। इसका अर्थ यह है कि यदि आपकी सेवा स्टार्टअप शुरू होने पर WinPcap सेवा पहले से SERVICE_RUNNING नहीं है, तो आपको ऐसा कुछ भी नहीं करना चाहिए जो आपकी सेवा के बाद तक SERVICE_RUNNING तक शुरू हो सकता है।

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

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

  3. मुझे नहीं लगता कि यह सुनिश्चित करने के लिए एक गारंटीकृत तरीका है कि डेस्कटॉप सेवा प्रकट होने से पहले आपकी सेवा शुरू हो जाती है। लेकिन आप सेवा नियंत्रण समूह बनाकर, सेवा नियंत्रण समूहों की मौजूदा सूची के अंत में जोड़ने और इस सेवा में अपनी सेवा डालने के साथ-साथ चीजों की सहायता करने में सक्षम हो सकते हैं। मैं पूरी तरह से आश्वस्त नहीं हूं कि यह आपकी सेवा को जल्द से जल्द शुरू करने का एक 'अनुमोदित' तरीका है, क्योंकि यदि कोई अनुमोदित तरीका था तो हर कोई ऐसा करेगा और यह अब और काम नहीं करेगा। लेकिन एक सुझाव है कि समूह में सेवाओं को समूह में नहीं होने से पहले शुरू किया जाता है।

    HKEY_LOCAL_MACHINE, "सिस्टम \ CurrentControlSet \ Control \ GroupOrderList" और HKEY_LOCAL_MACHINE, "सिस्टम \ CurrentControlSet \ Control \ ServiceGroupOrder" पर देखो और कुछ गुगलिंग करें।

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