estoy usando el siguiente código para acceder al servicio web de la banda del Explorador de Windows Shell:¿Por qué falla mi llamada a Activator.CreateInstance intermitentemente?
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;
Sobre todo, funciona muy bien. Un porcentaje muy pequeño del tiempo (menos del 1%), la llamada a Activator.CreateInstance lanza la siguiente excepción:
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)
He mirado el código de error, y que parece indicar que el servicio de ISN no registrado Estoy bastante seguro de que ese no es el caso, ya que la llamada funcionará muy bien unos minutos más tarde, y el CLSID es provisto por explorer.exe
.
Estoy perplejo. ¿Qué podría hacer que Activator.CreateInstance falle, pero solo en raras ocasiones?
Corregirme si me equivoco, pero ¿no es la presencia de ese objeto un detalle de implementación no documentado? –
@Stephen: El CLSID se define en SHOBJIDL.H pero no está documentado. Estoy buscando una respuesta práctica. Si tienes ideas sobre lo que podría causar los síntomas que estoy observando, soy todo oídos. Incluso si se trata de especulaciones sobre lo que explorer.exe podría estar haciendo internamente. –