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