【发布时间】:2018-02-10 17:17:33
【问题描述】:
我正在研究 IE11 浏览器助手对象。当我在 x86 中构建它时,我得到了它的工作。问题是,我想在 x64 上使用该项目,BHO 扩展在 x64 上构建时无法正常工作。
扩展显示在 Internet Explorer 加载项屏幕中,但没有显示 javascript 弹出窗口。
以管理员身份通过 Visual Studio 命令提示符使用 x64 版本的 regasm 注册 DLL,带有/不带有 /codebase 和 /tlb 但没有结果。注册表项已成功添加到我的注册表中,但 BHO 根本无法在 IE 中运行。我也尝试将文件放在 Program Files 的子文件夹中,但它根本不起作用。
当我在增强保护模式下运行我的 IE 时,插件管理器显示我的 BHO 是 incompatible,但如果没有 EPM,即使它不工作,IE 也会显示 enabled。
我想让 BHO 在 x64 上工作。
我也尝试过this 'hello world' BHO project,但是当我将其更改为基于 x64 而不是 x86 构建时,会出现同样的问题。
【问题讨论】:
-
所提供的示例适用于我的 64 位。您必须 1) 编译 x64 2) 使用
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe ieextension.dll /codebase注册(由于代码库,无需复制到程序文件),3) 确保主 iexplore.exe 运行 64 位,4) 确保“启用 64 位进程在 IE 的工具/选项/高级中检查了“增强保护模式”。仅供参考,我没有启用“启用增强保护模式”。 -
[ComRegisterFunction] 方法对我来说看起来很糟糕,它只写入 BHO 密钥,但无法写入 CLSID 密钥。 @Simon,你是怎么做到的?你是否可能做了 CodeProject 作者可能做过的同样的事情,并且一开始有一个没有 [ComRegisterFunction] 的代码版本?
-
@HansPassant - 是的,我忘了说我将 RegisterBHO 更改为
registryKey.OpenSubKey(guid, true);以便能够写入密钥,但这是我所做的唯一更改。 Regasm 64 必须以管理员身份运行(与 HKLM 中的更改一样)加上设置 IE 选项,就像我以前的 cmets 一样。 -
哎呀,还有那个。它仍然让我感到困惑,有人如何做到这一点,我怀疑他们的项目打开了“注册 COM 互操作”复选框。但可以肯定的是,在 64 位模式下不起作用。并且不会在另一台机器上工作。 Afaik,[ComRegisterFunction] 必须调用 RegistrationServices.RegisterAssembly(Assembly.GetExecutingAssembly(), AssemblyRegistrationFlags.SetCodeBase) 以便正确编写 CLSID 键,以便 IE 可以找到 DLL 并且 mscoree.dll 可以加载它。
-
@HansPassant - 我发布了一个答案,我认为必须为同一个 CLSID 注册 x86 和 x64 版本才能让 IE 满意。
标签: c# windows internet-explorer internet-explorer-11 bho