Sto utilizzando il seguente codice per accedere al servizio di banda sito del Windows Explorer Shell:Perché la mia chiamata a Activator.CreateInstance non riesce a intermittenza?
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;
Per lo più, funziona benissimo. Una percentuale molto piccola del tempo (meno dell'1%), la chiamata alla Activator.CreateInstance getta la seguente eccezione:
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)
ho guardato il codice di errore, e sembra indicare che l'isn di servizio registrati. Sono abbastanza sicuro che in realtà non è il caso poiché la chiamata funzionerà bene pochi istanti dopo, e il CLSID è fornito da explorer.exe
.
Sono perplesso. Cosa potrebbe causare il fallimento di Activator.CreateInstance, ma solo raramente?
Correggimi se ho torto, ma la presenza di quell'oggetto non è un dettaglio di implementazione non documentato? –
@Stephen: il CLSID è definito in SHOBJIDL.H ma è altrimenti non documentato. Sto cercando una risposta pratica. Se hai idee su cosa potrebbe causare i sintomi che sto osservando, sono tutto orecchie. Anche se è una speculazione su ciò che explorer.exe potrebbe fare internamente. –