我正在使用IE11 Browser Helper Object。当我在x86中构建它时,我得到了它。问题是,我想在x64上使用该项目,BHO扩展在x64上构建时无法正常工作。
扩展程序显示在Internet Explorer加载项屏幕上,但javascript弹出窗口未显示。
使用x64版本的regasm通过Visual Studio命令提示符以管理员身份注册DLL,使用/不使用/codebase
和/tlb
但没有结果。注册表项已在我的注册表中成功添加,但BHO根本无法在IE中工作。我还尝试将文件放在Program Files的子文件夹中,但它根本不起作用。
当我在增强保护模式下运行我的IE时,加载项管理器显示我的BHO是incompatible
,但没有EPM,IE显示enabled
即使它不起作用。
我想让BHO在x64上工作。
我也尝试了this 'hello world' BHO project但是当我将其更改为在x64上构建而不是x86时,会出现同样的问题。
答案 0 :(得分:3)
它似乎并不适用于所有人,因此,我将描述我为使其发挥作用所做的工作。
1)从这里下载示例项目:https://github.com/reinaldo13/ie-bho-extension
2)修改RegisterBHO(...)
BHO.cs
方法
从:
RegistryKey ourKey = registryKey.OpenSubKey(guid);
为:
RegistryKey ourKey = registryKey.OpenSubKey(guid, true); //we want to write the registry
3)为 AnyCPU 编译项目:项目属性,为平台目标选择AnyCPU。
4)创建一个这样的.bat,适应你的路径,并将其复制到你的输出dll旁边:
"c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" ieextension.dll /codebase
"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" ieextension.dll /codebase
这将为x86和x64注册dll。这是强制性以使两个版本都注册,否则IE不会喜欢它(它会抱怨扩展名不兼容')因为它不能够根据您的IE设置启动它。注意我想每个版本可以有两个不同的文件,但是.NET的AnyCPU并不需要。
5)以管理员身份运行.bat,这是我执行此操作时的输出:
"c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" ieextension.dll /codebase
Microsoft .NET Framework Assembly Registration Utility version 4.7.2046.0
for Microsoft .NET Framework version 4.7.2046.0
Copyright (C) Microsoft Corporation. All rights reserved.
RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can cause your assembly to interfere with other applications that may be installed on the same computer. The /codebase switch is intended to be used only with signed assemblies. Please give your assembly a strong name and re-register it.
Types registered successfully
"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" ieextension.dll /codebase
Microsoft .NET Framework Assembly Registration Utility version 4.7.2046.0
for Microsoft .NET Framework version 4.7.2046.0
Copyright (C) Microsoft Corporation. All rights reserved.
RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can cause your assembly to interfere with other applications that may be installed on the same computer. The /codebase switch is intended to be used only with signed assemblies. Please give your assembly a strong name and re-register it.
Types registered successfully
6)运行iexplore.exe
。它可能会起作用取决于您的设置(显示&#34; HOLA !!!&#34; messagebox),但无论如何,转到菜单工具/ Internet选项/程序/管理加载项,这是我看到的:< / p>
如果禁用了扩展程序,您应该能够启用它(并重新启动)。
如果它不起作用(默认情况下它不应该),请确保您已检查过&#34;为增强保护模式启用64位进程*&#34; (需要重启)。对我来说,消息是错误的,它应该只是说&#34;启用64位进程&#34; ...
答案 1 :(得分:0)