2009-07-21 14 views
7

मैं अपने विंडोज़ सेवा (स्वतंत्र रूप से संस्थापक वर्ग और Sc.exe का प्रयोग करके) तैनात किया है, लेकिन जब मैं इसे शुरू करने की कोशिश मैं एक त्रुटि मिलती है:विंडोज़ सेवा शुरू करने के लिए टाइमआउट क्या है?

--------------------------- 
Services 
--------------------------- 
Could not start the MyName service on Local Computer. 



Error 1053: The service did not respond to the start or control request in a timely fashion. 

टाइमआउट क्या है? यह लगभग 3 सेकंड की तरह महसूस किया। अगर मेरी सेवा अधिक समय लेती है तो मुझे क्या करने की ज़रूरत है?

उत्तर

14

आपकी सेवा कक्षा में, का उपयोग ServiceBase.RequestAdditionalTime() अपने onStart/OnStop विधि में:

// request an additional 4 seconds to complete the operation 
RequestAdditionalTime(4000); 
+1

यह बहुत उपयोगी है। धन्यवाद। – Jirapong

11

एक सेवा बनाने की सामान्य तरीके से स्टार्टअप कोड एक नया धागा बनाने के लिए है, और उस धागे में आपकी सेवा को चलाने के लिए है।

सेवा स्टार्टअप लगभग तुरंत होगा चाहिए - यह में अपने "असली" काम के साथ एक नया धागा को उत्पन्न करने से ज्यादा कुछ नहीं।

आप तीन से अधिक सेकंड ले रहे हैं, कि एक संकेत है कि आप अपने मुख्य थ्रेड में असली काम कर रहे हैं, और आपकी सेवा के लिए एक अलग से एक बनाने नहीं है।

+2

इस गरीब डिजाइन जहां यह मौजूद नहीं हो सकता है मान लिया गया है। कॉम्प्लेक्स प्रारंभिक समय में अतिरिक्त समय लग सकता है, और "प्रतिक्रिया देने में विफल" संदेश उपयोगकर्ताओं को असफल स्टार्टअप में अलर्ट करता है। यदि किसी थ्रेड में विफलता हुई और सेवा परिणामस्वरूप बंद हो जाती है, तो केवल दृश्यमान सबूत (एक अलग निगरानी UI के बिना) ईवेंट लॉग में होंगे। –

+0

क्यों? ! – zvolkov

+3

स्टार्टअप के लिए 3 सेकंड की समय सीमा है। इस विस्तार करने के लिए तरीके (RequestAdditionalTime()) हैं, लेकिन सिफारिश यह है कि सेवाओं को तुरंत शुरू कर देना चाहिए, और/या एक अलग ढंग से एक अलग थ्रेड में काम करते हैं, और सतर्क धक्का है। स्टार्टअप के लिए लंबा समय लेना अन्य सेवाओं को तुरंत शुरू करने से रोक देगा, जो एक खराब डिजाइन है, आईएमओ। –

2

विशिष्ट प्रश्न के संबंध में, सही समय समाप्त होती है, लेकिन कम से कम 30 सेकंड है। आप रजिस्ट्री कुंजी के माध्यम से किसी सेवा के लिए डिफ़ॉल्ट स्टार्टअप टाइमआउट को नियंत्रित कर सकते हैं, आप यह देख सकते हैं कि यह here कैसे करें।

हालांकि, मैं कई अन्य लोगों से सहमत हूं कि मैं दो संभावित विकल्पों को देखूंगा।

  1. आपकी सेवा यथाशीघ्र आरंभ करें .. एक धागा, आदि अंडे,
  2. आप विकल्प एक के साथ नहीं जा सकते हैं, तो आप RequestAdditionalTime उपयोग कर सकते हैं()। बस इस कॉल को जल्दी से सुनिश्चित करना सुनिश्चित करें।
1

यदि आपने विभिन्न शारीरिक वातावरण में सेवा का परीक्षण किया था, और ऐसा लगता है कि यह मुद्दा सामान्य स्टार्टअप समय नहीं है बल्कि पीसी का प्रदर्शन नहीं है। आप विशिष्ट पीसी के लिए रजिस्ट्री कुंजी पर टाइमआउट बढ़ा सकते हैं।

कृपया देखें: http://support.microsoft.com/kb/839803

सादर

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