繁体   English   中英

为什么我对Activator.CreateInstance的调用会间歇性地失败?

[英]Why does my call to Activator.CreateInstance intermittently fail?

我正在使用以下代码访问Windows资源管理器Shell的乐队网站服务:

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)

我查找了错误代码,似乎表明该服务未注册。 我很确定实际情况并非如此,因为调用会在稍后时间正常工作,而且CLSID由explorer.exe提供。

我很难过。 什么可能导致Activator.CreateInstance失败,但很少?

权限? 是的,高完整性应用程序在中等完整性应用程序中访问COM对象时出现问题。 在我的网站的某个地方有一个这样的演示。 啊,但是对于TrayNotify类,不是TrayBandSiteService 我希望你没有花太多时间搞清楚你可能很容易读到的东西。

无论如何,看到的最后一段这样 ,从我现在的报价:

另外,请注意,如果启用了用户帐户控制(UAC)并且程序以提升的权限运行,则程序将失败。 EXPLORER是COM服务器,TRAYNOT(我的演示程序)是COM客户端。 然而,EXPLORER只具有中等完整性。 虽然微软关于UAC的说明 - 它们并不足以算作编程文档 - 处理低完整性COM客户端试图与更高完整性的COM服务器通信的情况,但奇怪的是反过来说。 保护较高完整性的COM客户端免受较低完整性COM服务器的影响,就像保护较高完整性程序免受从较低完整性程序接收窗口消息一样。 对于后者,Microsoft为更高完整性的程序提供明确的方法,以便从较低完整性的源中打开自己的预期消息。 找到COM的类似条款可能是另一次有价值的练习。

我很遗憾地说我从来没有找到时间。

我在这里找到了关于TrayBandSiteService的一些解释: http//www.geoffchappell.com/viewer.htm? doc = studies /windows / shells / explorer / classes / traybandsiteservice.htm

如果Geoff Chappell是对的,它可能与我的机器上的问题相同:有时,资源管理器会重新启动,而在这一刻,可能无法访问TrayBandSiteService。

Activator.CreateInstance(typeof(MyType))当我尝试在独立的Windows应用程序中运行代码时工作正常。 当我尝试在wcf服务下的类库中运行相同的代码时失败的地方

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM