【问题标题】:Error 800706B5 when calling IWebBrowser2->get_Document调用 IWebBrowser2->get_Document 时出现错误 800706B5
【发布时间】:2010-11-28 11:33:15
【问题描述】:

在使用 IE8 的 Vista 上,我有一个 IWebBrowser2 实例,我用它来获取当前的 HTML 文档:

IWebBrowser2* browser;
CComPtr<IDispatch> disp;
HRESULT hr = browser->get_Document(&disp);

当管理员执行此操作时,调用成功。但是,当被普通用户调用时,尽管页面位于“受信任的站点”并且“保护模式”处于关闭状态,但调用仍会返回错误代码“800706B5”(“接口未知”)。

同样的代码在 Vista 上的 IE7 和 XP 上的 IE8 上运行没有问题。

有谁知道为什么会出现这个错误,我可以做些什么来解决这个问题?以管理员身份运行并不理想,Jon Skeet 也被这个难住了 :)

更新:问题似乎围绕着 UAC:完全关闭 UAC 可以让普通用户正常工作(尽管它明显不安全)

【问题讨论】:

  • 您是在等待 DocumentComplete 事件触发,还是等待 ReadyState 属性变为 READSTATE_COMPLETE,然后再调用 get_Document()?

标签: c++ windows internet-explorer com windows-vista


【解决方案1】:

发生错误是因为在 Vista 上,IE 8 以“低完整性”模式运行,而我的测试代码以普通用户身份运行,以“中等完整性”运行。安全模型的设计使得代码可以向完整性较低的组件发送指令,但默认情况下无法将数据从“较低”组件读取到“较高”组件。

有关How the Integrity Mechanism Is Implemented in Windows Vista 的更多信息请参阅本文档

【讨论】:

  • 解决方法是改用 InternetExplorer.ApplicationMedium。更多解释见this page
【解决方案2】:

IE8 是由管理员安装的“仅限此用户”吗?我不知道为什么或是否会出现此错误,只是一种预感。

【讨论】:

  • 好问题。我认为它是在系统范围内安装的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2012-12-07
  • 2018-04-20
  • 2017-03-06
  • 2013-02-08
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多