Ich verwende den folgenden Code, um auf den Band-Site-Dienst der Windows Explorer Shell zuzugreifen:
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;
Meistens funktioniert es gut. In einem sehr geringen Prozentsatz der Zeit (weniger als 1 %) löst der Aufruf von Activator.CreateInstance die folgende Ausnahme aus:
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)
Ich habe den Fehlercode nachgeschlagen, und er scheint darauf hinzuweisen, dass der Dienst nicht registriert ist. Ich bin mir ziemlich sicher, dass das nicht der Fall ist, da der Aufruf ein paar Augenblicke später problemlos funktioniert und die CLSID von explorer.exe
.
Ich bin verblüfft. Was könnte dazu führen, dass Activator.CreateInstance fehlschlägt, aber nur selten?
0 Stimmen
Korrigieren Sie mich, wenn ich falsch liege, aber ist das Vorhandensein dieses Objekts nicht ein undokumentiertes Implementierungsdetail?
0 Stimmen
@Stephen: Die CLSID ist in SHOBJIDL.H definiert, aber ansonsten undokumentiert. Ich bin auf der Suche nach einer praktischen Antwort. Wenn Sie eine Idee haben, was die Symptome, die ich beobachte, verursachen könnte, bin ich ganz Ohr. Selbst wenn es nur Spekulationen darüber sind, was explorer.exe intern tun könnte.