2010-01-05 6 views
5

बंद करने पर रोकने के लिए एक सेवा की प्रतीक्षा करने के लिए मजबूर करना मुझे एक समस्या है जिसे मैं सी # में लिखी गई विंडोज सेवा के बारे में नहीं समझ सकता। मैं जो करने की कोशिश कर रहा हूं वह है कि मुझे इसे मारने और सेवा को रोकने के लिए मजबूर होने से पहले एक बच्चे की प्रक्रिया को समाप्त करने के लिए निर्दिष्ट अवधि की प्रतीक्षा करें। मैंने अपना टाइमआउट 5 से 15 सेकंड तक कहीं भी सेट किया है और मेरी सेवा उचित समय की प्रतीक्षा करती है और फिर बच्चे को मार देती है और जब मैं इसे एमएमसी सेवा विंडो के माध्यम से रोकता हूं तो रोकता है। हालांकि अगर मैं कंप्यूटर बंद कर देता हूं तो मेरी सेवा ठीक से प्रतीक्षा करने और बंद होने में सक्षम होने से पहले उड़ा दी जाती है। मैंने पढ़ा है कि विंडोज इसे बंद करने से पहले बंद करने के लिए 30 सेकंड के टाइमआउट के लिए अनुमति देता है। मेरा कोड 30 सेकंड से बहुत कम समय में निष्पादित कर रहा है, अधिकतम 20 सेकंड या उससे भी अधिक है, जो मैंने टाइमआउट सेट किया है उसके आधार पर।विंडोज़ को

मैंने win32 एपीआई में SetServiceStatus() फ़ंक्शन का उपयोग करने का प्रयास किया है, लेकिन इसने कोड के फ़ंक्शन को नहीं बदला है। मैंने सत्यापित किया है कि फ़ंक्शन कॉल सफल हो रहा है। क्या विंडोज़ को मेरी सेवा को ठीक से बंद करने की प्रतीक्षा करने के लिए मजबूर करने का कोई और तरीका है? मैं इसे विंडोज 7 x86, और विंडोज विस्टा एसपी 1 x86 में परीक्षण कर रहा हूं।

उत्तर

2

विंडोज नहीं किसी भी सेवा को बंद करने से रोकने दें, यह डिज़ाइन है। जैसा कि गुरूरी कहते हैं, आपको अपने ऐप के लिए एक अलग डिज़ाइन पर विचार करना होगा।

+0

+1: * जाहिर है * यहां समाधान समाधान को रोकने के लिए कम समय ले रहा है। बहुत सारे अनुप्रयोग इस के महत्व को अनदेखा करते हैं और। –

0

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

मैं इस तथ्य के साथ चेतावनी दूंगा कि मैं सी # का उपयोग करता हूं और .NET के सर्विसबेस के कार्यान्वयन से यह करता है, मैं सी/सी ++ कोड या एपीआई के बारे में आधिकारिक रूप से बात नहीं कर सकता।

1

यह एक वैश्विक विंडोज सेटिंग है, जाहिर है: http://support.microsoft.com/kb/305788। अगर मैं उपयोगकर्ताओं को अपनी सेवा बंद करने के लिए भरोसा करता हूं तो मुझे चिंता होगी। मैं इसके बजाय समय-समय पर अपना डेटा बचाऊंगा।

+0

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