无法让BHO工作在64位

时间:2017-09-01 15:35:21

标签: c# windows internet-explorer internet-explorer-11 bho

我正在使用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时,会出现同样的问题。

2 个答案:

答案 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>

enter image description here

如果禁用了扩展程序,您应该能够启用它(并重新启动)。

如果它不起作用(默认情况下它不应该),请确保您已检查过&#34;为增强保护模式启用64位进程*&#34; (需要重启)。对我来说,消息是错误的,它应该只是说&#34;启用64位进程&#34; ...

enter image description here

答案 1 :(得分:0)

Regasm.exe(程序集注册工具)HERE

检查项目设置以编译为64位并检查IE版本。并以管理员模式运行它。

您的准则很完美。只是系统设置和编译配置搞砸了,

还可以查看此设置 https://answers.microsoft.com/en-us/ie/forum/ie11-windows_7/enable-64-bit-processes-in-ie-11/212270df-cc35-4e09-89e4-13b9da1bb6a7?auth=1

希望这会帮助你!!