2009-02-16 15 views
5

से शुरू करने से रोकती है जब मैं Verisign signtool.exe के साथ मेरी सेवा में असेंबली पर हस्ताक्षर करता हूं, तो यह Windows 2003 सर्वर चलाने वाली मशीन पर मशीन प्रारंभ होने पर शुरू होने में विफल रहता है। इवेंट लॉग में दो इवेंट हैं:हस्ताक्षरित असेंबली मेरी सेवा को

"टाइमआउट (30000 मिलीसेकंड) xxx सेवा सेवा को कनेक्ट करने के लिए प्रतीक्षा कर रहा है।" और "xxx सेवा सेवा निम्न त्रुटि के कारण शुरू करने में विफल रही: सेवा ने समय-समय पर प्रारंभ या नियंत्रण अनुरोध का जवाब नहीं दिया।"

मशीन चलने के बाद यह ठीक शुरू होता है। यह एक्सपी और विस्टा में ठीक शुरू होता है। जब विधानसभाएं हस्ताक्षरित होती हैं तो यह ठीक शुरू होता है।

उत्तर

2

आपके असेंबली पर हस्ताक्षर करने वाले प्रामाणिकोड को ठंड स्टार्टअप पर बहुत नकारात्मक प्रभाव हो सकता है। विवरण के लिए यह KB आलेख देखें।

http://support.microsoft.com/default.aspx/kb/936707

+0

हालांकि एक पैच स्थापित करना जहां एमएस कहता है कि यह परीक्षण नहीं किया जाता है, उत्पादन प्रणाली पर बहुत आकर्षक नहीं लगता है ... –

1

Spacedog के रूप में कहा, एथेंटिकोड स्टार्टअप समय पर बुरा प्रभाव पड़ सकता है। तो सवाल यह है कि आप क्या हस्ताक्षर कर रहे हैं? यह प्रमाणीकरण के लिए पर्याप्त होना चाहिए केवल आपकी सेवा निष्पादन योग्य है जो बदले में केवल मजबूत नामित असेंबली का संदर्भ लेना चाहिए। इस प्रकार Authenticode हस्ताक्षर सत्यापित करने के उपरि।

यदि आप संभव हो तो आप अपनी असेंबली को जीएसी में इंस्टॉल कर सकते हैं - यदि संभव हो तो यह स्टार्टअप प्रदर्शन को थोड़ा बढ़ा देगा क्योंकि मजबूत नाम सत्यापन छोड़ दिया गया है (Authenticode and Assemblies देखें) और/या स्टार्टअप समय अभी भी एक समस्या है, तो आप अपनी असेंबली को भी एनजेन कर सकते हैं।

जवाब से Windows service startup timeout Romulo ए Ceccon द्वारा करने के लिए:

It's good practice to finish starting your service as fast as possible. So, during the start state, do only what you absolutely need to acknowledge it started successfully; and do the rest later. If the start is still a lengthy process, use SetServiceStatus periodically to inform the Service Control Manager that you have not yet finished, so it does not time-out your service.

SetServiceStatus के अलावा आप यह भी कहा कि इस सेवा को शुरू करने के लिए अतिरिक्त समय की जरूरत है सेवा नियंत्रण प्रबंधक (SCM) बताने के लिए कोशिश कर सकते ServiceBase.RequestAdditionalTime पर कॉल करके।

+0

यह उत्तर मजबूत नाम हस्ताक्षर के साथ प्रमाणीकरण हस्ताक्षर को भंग करने लगता है? – Dave

+1

नहीं। किस तरह से? –

+0

(जारी) Authenticode का उपयोग करते समय यह पर्याप्त है कि संदर्भित असेंबली मजबूत नाम पर हस्ताक्षर किए गए हैं। मैं एक संदर्भ खोजने की कोशिश कर रहा था, दुर्भाग्य से मुझे केवल यह पोस्ट मिला: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/493aca7f-b5ea-4462-a15f-affe874bfe44/ –

4

यह समस्या हस्ताक्षर किए गए .NET सेवा निष्पादन योग्य के लिए बहुत आम है: सेवा बूट समय पर शुरू होने में विफल हो जाएगी, लेकिन बाद में मैन्युअल रूप से प्रारंभ होने पर ठीक चलें। चाहे ServiceBase.RequestAdditionalTime का उपयोग अप्रासंगिक है: वास्तव में, सेवा शुरू करने के पहले अनुरोध समय से पहले कोई उपयोगकर्ता कोड निष्पादित नहीं किया जाता है। यह प्रभाव इंटरनेट कनेक्टिविटी के बिना मशीनों पर और भी स्पष्ट है: उस स्थिति में, एससीएम से मैन्युअल रूप से सेवा शुरू करने में भी असफल हो जायेगा।

अपने .exe.config फ़ाइल में निम्न तत्व जोड़कर इस मुद्दे, disable the verification of the Authenticode signature at load time in order to create Publisher evidence, हल करने के लिए:

<configuration> 
    <runtime> 
     <generatePublisherEvidence enabled="false"/> 
    </runtime> 
</configuration> 

प्रकाशक सबूत एक छोटे से इस्तेमाल किया कोड प्रवेश सुरक्षा (कैस) सुविधा है: केवल तभी आपकी सेवा PublisherMembershipCondition पर निर्भर करता है इससे समस्याएं उत्पन्न हो सकती हैं। अन्य सभी मामलों में, यह स्थायी या अंतःस्थापित स्टार्टअप विफलताओं को दूर कर देगा, अब रनटाइम को महंगा प्रमाणपत्र चेक करने की आवश्यकता नहीं है (निरस्तीकरण सूची लुकअप सहित)।

संपादित करें, जुलाई 2010: .NET Framework के संस्करण 4.0 का उपयोग कर अनुप्रयोगों के लिए, इस कार्यवाही की अब आवश्यकता नहीं है।

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