2010-01-06 14 views
7

मैं एक विंडोज सेवा का कुछ व्यापक परीक्षण कर रहा हूं जिसे मैं सी # नेट 3.5 में लिख रहा हूं। मुझे विंडोज़ को फिर से चालू करने के लिए पर्याप्त समय देने में परेशानी हो रही है जब मैं कंप्यूटर को पुनरारंभ या बंद कर देता हूं, भले ही मैं RequestAdditionalTime() विधि का आह्वान कर रहा हूं, जिसे एससीएम अपडेट करना चाहिए और मेरी सेवा को चालू रखना चाहिए। यदि मैं मैन्युअल रूप से सेवा को रोकता हूं तो मेरा कोड ठीक से काम करता है। मैं मुख्य रूप से विंडोज एक्सपी में कोड का परीक्षण करने का निर्णय लेने पर विंडोज विस्टा और विंडोज 7 में इस कोड का परीक्षण कर रहा हूं, सब कुछ पूरी तरह से काम करता है। क्या किसी को पता है कि यह कॉल Vista/7 में क्यों काम नहीं करती है? मुझे लगता है कि मुझे सिस्टम को बंद करने से रोकने के लिए किसी तरह की अनुमति की आवश्यकता है जो मैं एक्सपी में डिफ़ॉल्ट रूप से प्राप्त करता हूं लेकिन Vista/7 में नहीं।VistaAditionalTime() विधि Vista/7 में पुनरारंभ करने पर क्यों काम नहीं करती है?

उत्तर

6

यदि सिस्टम बंद नहीं हो रहा है, तो आपकी सेवा अतिरिक्त समय का अनुरोध कर सकती है और आपकी प्रक्रिया नहीं मारेगी।

यदि सिस्टम बंद हो रहा है, तो आपकी सेवा को बंद करना होगा। आपको सामान्य 30 सेकंड भी प्राप्त नहीं होते हैं जो सामान्य रूप से एक सेवा प्राप्त होती है। शट डाउन होने के मुकाबले ज्यादा बलवान है।

+2

वहाँ किसी भी तरह से समय की राशि आपकी सेवा बंद करने के लिए मिल जाएगा पता करने के लिए है जब आप बंद या कंप्यूटर को पुनरारंभ? मुझे पता है कि WaitToKillServiceTimeout W7 में 12000 और Vista, XP में 20000 पर सेट है। लेकिन जब भी आप W7 या Vista में यह मान बदलते हैं तो इसका बहुत कम या कोई प्रभाव नहीं पड़ता है। विशेष रूप से विंडोज 7 में यह कुछ सेकंड के भीतर आपकी सेवा stomps। अंतर्दृष्टि के लिए धन्यवाद। –

+0

मुझे लगता है कि जानने का कोई तरीका नहीं है। मान लीजिए विंडोज सभी सेवाओं को बंद करने के लिए 13 सेकंड की अनुमति देता है। कुछ अन्य सेवा में 12 सेकंड का सीपीयू समय लगता है (इसलिए उस समय के दौरान अन्य सेवाएं निष्पादित नहीं हो सकती हैं) और आखिर में बंद हो जाती हैं। यह बाकी सभी के लिए 1 सेकंड छोड़ देता है। विंडोज उन्हें मारने जा रहा है। –

2

गैर बंद मामले में, RequestAdditionalTime() हर 2 मिनट से भी अधिक बार बुलाया जाना चाहिए:

protected override void OnStop() 
    { 
     Thread.Sleep(60000); 
     RequestAdditionalTime(180000); 
     Thread.Sleep(60000); 
     RequestAdditionalTime(180000); 
     Thread.Sleep(5000); 
    } 

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

+0

क्या आपके पास समय पैरामीटर के अर्थ का संदर्भ है? यह एमएसडीएन पर सूचीबद्ध नहीं है। –

+1

@ डेविड: यह एक साल पहले खत्म हो गया था, लेकिन मुझे इसे कुछ परीक्षण के रूप में याद किया गया है। –

+0

यह विंडोज 7 में काम नहीं करता है (हालांकि यह यहां कॉन्फ़िगर किया गया है)। इसके अलावा, उदाहरण स्पष्ट रूप से अधिक समय को स्पष्ट नहीं करता है क्योंकि डिफ़ॉल्ट 120 है (यहां) और केवल ~ 125 नींद दिखाए जाते हैं। – user2864740

1

साइमन Buchan के जवाब में 2 मिनट लिंक मेरी माइक्रोसॉफ्ट यहाँ में जाना जाता है: http://connect.microsoft.com/VisualStudio/feedback/details/96460/servicebase-requestadditionaltime-has-no-impact-on-start-timeout

+2

हालांकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

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