c# - No puedo hacer que BHO trabaje en 64 bits
windows internet-explorer (2)
Estoy trabajando en IE11 Browser Helper Object. Lo tengo funcionando cuando lo construyo en x86. El problema es que quiero usar el proyecto en x64, la extensión BHO no funciona cuando está basada en x64.
La extensión aparece en la pantalla de complementos de Internet Explorer, pero la ventana emergente de JavaScript no se muestra.
La DLL se registra utilizando la versión x64 de regasm mediante el símbolo del sistema de Visual Studio como administrador, con / sin /codebase
y /tlb
pero sin resultado. La clave de registro se agrega con éxito en mi registro, pero el BHO simplemente no está funcionando en IE. También intenté ubicar los archivos en una subcarpeta de Archivos de programa, pero simplemente no funciona.
Cuando ejecuto mi IE en modo protegido mejorado, el administrador de complementos muestra que mi BHO es incompatible
, pero sin EPM, IE se muestra enabled
aunque no funcione.
Me gustaría que BHO trabaje en x64.
También probé este proyecto BHO ''hola mundo'' pero cuando lo cambio para construir en x64 en lugar de x86 ocurre el mismo problema.
Parece que no funciona para todos, entonces, describiré lo que hice para que funcione.
1) descargue el proyecto de muestra desde aquí: https://github.com/reinaldo13/ie-bho-extension
2) modificar el método RegisterBHO(...)
en BHO.cs
de:
RegistryKey ourKey = registryKey.OpenSubKey(guid);
a:
RegistryKey ourKey = registryKey.OpenSubKey(guid, true); //we want to write the registry
3) compile el proyecto para AnyCPU : Propiedades del proyecto, seleccione AnyCPU para el objetivo de la plataforma.
4) cree un .bat como este, adapte su ruta, y copie eso aparte de su salida 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
Esto registrará el dll para x86 y x64. Esto es obligatorio para tener ambas versiones registradas, de lo contrario no le agradaría a IE (se quejará de que la extensión es ''incompatible'') porque no podrá iniciarlo dependiendo de su configuración de IE. Nota Supongo que puede tener dos archivos diferentes para cada versión, pero AnyCPU de .NET no necesita eso.
5) ejecuta ese .bat como administrador, aquí está la salida cuando hago esto:
"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) ejecuta iexplore.exe
. Puede funcionar dependiendo de su configuración (muestra un cuadro de mensaje "HOLA !!!"), pero de todos modos, vaya al menú Herramientas / Opciones de Internet / Programas / Administrar complementos, esto es lo que veo:
Si la extensión está deshabilitada, debería poder habilitarla (y reiniciarla).
Si no funciona (de manera predeterminada no debería), asegúrese de haber marcado "Habilitar procesos de 64 bits para el Modo protegido mejorado *" (necesita reiniciarse). Para mí, el mensaje es incorrecto, solo debería decir "Habilitar procesos de 64 bits" ...
Regasm.exe (Assembly Registration Tool) AQUÍ
Compruebe la configuración de su proyecto para compilar como 64 bits y también compruebe la versión de IE. y ejecutarlo en modo Administrador.
Tu código es perfecto solo la configuración del sistema y las configuraciones de compilación están en mal estado,
También eche un vistazo a esta configuración 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
Espero que esto te ayude !!