2010-05-22 15 views
5

मैं Windows Explorer शेल के बैंड साइट सेवा का उपयोग करने के लिए निम्न कोड का उपयोग कर रहा:एक्टिवेटर को मेरा कॉल क्यों करता है। क्रिएट इंस्टेंस अंतःस्थापित हो जाता है?

Guid GUID_TrayBandSiteService = new Guid(0xF60AD0A0, 0xE5E1, 0x45cb, 0xB5, 0x1A, 0xE1, 0x5B, 0x9F, 0x8B, 0x29, 0x34); 
Type shellTrayBandSiteService = Type.GetTypeFromCLSID(GUID_TrayBandSiteService, true); 
site = Activator.CreateInstance(shellTrayBandSiteService) as IBandSite; 

ज्यादातर, यह बहुत अच्छा काम करता है। समय (1% से कम) का एक बहुत ही छोटा सा प्रतिशत, Activator.CreateInstance करने के लिए कॉल निम्नलिखित अपवाद फेंकता है:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {F60AD0A0-E5E1-45CB-B51A-E15B9F8B2934} failed due to the following error: 80040154. 
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) 
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) 
    at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 

मैं त्रुटि कोड को देखा है, और यह इंगित करने के लिए प्रतीत होता है कि सेवा प्रतिसाद नहीं पंजीकृत नहीं है। मुझे पूरा यकीन है कि वास्तव में यह मामला नहीं है क्योंकि कॉल कुछ ही क्षण बाद ठीक काम करेगा, और सीएलएसआईडी explorer.exe द्वारा प्रदान की जाती है।

मैं स्टंप हो गया हूं। क्या Activeator.CreateInstance विफल हो सकता है, लेकिन केवल शायद ही कभी?

+0

यदि मैं गलत हूं, तो मुझे सही करें, लेकिन उस वस्तु की उपस्थिति एक अनियंत्रित कार्यान्वयन विस्तार नहीं है? –

+0

@ स्टीफन: सीएलएसआईडी को SHOBJIDL.H में परिभाषित किया गया है लेकिन अन्यथा अनियंत्रित है। मैं एक व्यावहारिक उत्तर की तलाश में हूं। यदि आपके पास विचार है कि लक्षणों का कारण क्या हो सकता है, तो मैं सभी कान हूं। यहां तक ​​कि अगर यह अनुमान लगाया गया है कि explorer.exe आंतरिक रूप से क्या कर रहा है। –

उत्तर

1

अनुमतियां? हां, मध्यम-अखंडता अनुप्रयोगों में COM ऑब्जेक्ट्स तक पहुंचने वाले उच्च-अखंडता अनुप्रयोगों में कोई समस्या है। मेरी वेबसाइट पर कहीं इस पर एक प्रदर्शन है। आह, लेकिन TrayNotify वर्ग के लिए, TrayBandSiteService नहीं। मुझे आशा है कि आपने कुछ ऐसा समय निकालने में व्यतीत नहीं किया है जिसे आप आसानी से पढ़ सकते हैं।

एक के रूप में एक तरफ, ध्यान दें कि कार्यक्रम विफल रहता है उपयोगकर्ता खाता नियंत्रण (UAC) सक्षम किया गया है और इस कार्यक्रम ऊंचा साथ चलाया जाता है:

वैसे भी, this के अंतिम पैरा, जिसमें से अब मैं बोली देखना विशेषाधिकार। एक्सप्लोरर COM सर्वर और ट्रेनोट (मेरा प्रदर्शन कार्यक्रम) एक COM क्लाइंट है। फिर भी एक्सप्लोरर में केवल मध्यम अखंडता है। हालांकि यूएसी पर माइक्रोसॉफ्ट के नोट्स - वे प्रोग्रामिंग दस्तावेज के रूप में गिनने के लिए पर्याप्त रूप से पर्याप्त नहीं हैं - कम-अखंडता की स्थिति के साथ सौदा करते हैं COM क्लाइंट एक उच्च-अखंडता COM सर्वर के साथ संवाद करने की कोशिश कर रहा है, उत्सुकता से रिवर्स के बारे में कुछ कहा जाता है। एक उच्च-अखंडता COM क्लाइंट को निम्न-अखंडता COM सर्वर से संरक्षित किया जाता है, क्योंकि उच्च-अखंडता प्रोग्राम को निम्न-अखंडता प्रोग्राम से विंडो संदेशों को प्राप्त करने से सुरक्षित किया जाता है। बाद के लिए, माइक्रोसॉफ्ट उच्च-अखंडता कार्यक्रम प्रदान करता है जिसमें स्पष्टीकरण का अर्थ निम्न-अखंडता स्रोत से अपेक्षित संदेशों को खोलना है। COM के लिए समान प्रावधान ढूँढना किसी अन्य समय के लिए एक सार्थक अभ्यास हो सकता है।

मुझे खेद है कि मुझे कभी समय नहीं मिला है।

0

मैं यहाँ TrayBandSiteService के बारे में कुछ स्पष्टीकरण पाया: http://www.geoffchappell.com/viewer.htm?doc=studies/windows/shell/explorer/classes/traybandsiteservice.htm

और अगर ज्योफ चैपल सही है, यह मेरी मशीन पर के रूप में एक ही समस्या हो सकती है: कभी कभी एक्सप्लोरर पुन: प्रारंभ करने करता है और इस समय के लिए (रों) ट्रेबैंडसाइट सेवा उपलब्ध नहीं हो सकती है।

0

Activator.CreateInstance(typeof(MyType)) ठीक काम करता है जब मैं अकेले स्टैंड में कोड चलाने की कोशिश करता हूं विंडोज़ एप्लीकेशन। जब मैं डब्ल्यूसीएफ सेवाओं के तहत कक्षा पुस्तकालय में एक ही कोड चलाने की कोशिश करता हूं, तो यह विफल रहता है

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

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