2017-09-01 59 views
20

我正在使用IE11浏览器助手对象。当我在x86中构建它时,我得到了它的工作。问题是,我想在x64上使用该项目时,BHO扩展在x64上构建时无法正常工作。无法获得BHO在64位工作

扩展名显示在Internet Explorer加载项屏幕上,但javascript弹出窗口未显示。

使用/不带/codebase/tlb的管理员通过Visual Studio命令提示符使用regasm的x64版本注册DLL,但没有结果。注册表项已成功添加到我的注册表中,但BHO根本无法在IE中使用。我也尝试将这些文件放在Program Files的子文件夹中,但它不起作用。

当我跑我的IE浏览器在增强保护模式加载项管理器显示我的BHO是incompatible,但没有EPM的IE显示enabled即使它不工作。

我想让BHO在x64上工作。

我也试过this 'hello world' BHO project但是当我改变它建立在x64而不是x86上时会出现同样的问题。

+1

在64位所提供的样品为我工作。你必须1)使用'c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe ieextension.dll/codebase'编译x64 2)注册表(无需复制到程序文件,由于代码库),3 )确保主iexplore.exe运行64位,4)确保在IE的工具/选项/高级中选中“为增强保护模式启用64位进程”。FYI我没有“启用增强保护模式“Enable。 –

+0

[ComRegisterFunction]方法对我来说看起来相当糟糕,它只写BHO键,但没有写CLSID键@Simon,你是怎么做到的?你也许做了CodeProject作者可能做的同样的事情已经完成并且有一个没有[ComRegisterFunction]的代码版本? –

+0

@HansPassant - 是的,我忘记说我把RegisterBHO改成了'registryKey.OpenSubKey(guid,true);'能够编写密钥,但这是我做的唯一的改变。Regasm 64必须以管理员身份运行(通常用于HKLM的更改)Plus设置IE选择像我以前的评论一样。 –

回答

1

看来它不适用于每个人,所以,我会描述我所做的工作。

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 

这将注册DLL用于x86和x64。这是强制有两个版本注册,否则IE不会喜欢它(它会抱怨扩展是'不兼容'),因为它将无法启动它取决于您的IE设置。注意我想你可以为每个版本有两个不同的文件,但是.NET的AnyCPU不需要这个文件。

5)运行的是蝙蝠作为管理员,这里是输出当我这样做:

"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。它可以根据你的设定(显示“HOLA!”消息框)工作,但不管怎么说,进入菜单工具/ Internet选项/程序/管理加载项,这是我所看到的:

enter image description here

如果扩展功能被禁用,您应该可以启用它(并重新启动)。

如果它不起作用(默认情况下不应该),请确保您已选中“为增强保护模式*启用64位进程”(需要重新启动)。给我的信息是错误的,它应该只是说“启用64位进程” ......

enter image description here