2017-09-01 4 views
20

Je travaille sur IE11 Browser Helper Object. Je l'ai eu quand je l'ai construit en x86. Le problème est, je veux utiliser le projet sur x64 l'extension BHO ne fonctionne pas quand il est construit sur x64.Impossible d'obtenir BHO en 64 bits

L'extension apparaît dans l'écran des modules complémentaires d'Internet Explorer, mais la fenêtre contextuelle javascript n'apparaît pas. La DLL est enregistrée en utilisant la version x64 de regasm via l'invite de commande Visual Studio en tant qu'administrateur, avec/sans les /codebase et /tlb mais sans résultat. La clé de registre est ajoutée avec succès dans mon registre mais le BHO ne fonctionne tout simplement pas dans IE. J'ai également essayé de placer les fichiers dans un sous-dossier de Program Files, mais cela ne fonctionne tout simplement pas. Lorsque j'exécute mon IE en mode protégé amélioré, le gestionnaire de module d'extension montre que mon BHO est incompatible, mais sans EPM, l'IE montre enabled même si cela ne fonctionne pas.

Je voudrais que le BHO travaille sur x64.

J'ai également essayé this 'hello world' BHO project mais quand je le change pour construire sur x64 au lieu de x86 le même problème se produit.

+1

L'échantillon fourni fonctionne en 64 bits pour moi. Vous devez 1) compiler x64 2) enregistrer en utilisant 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe ieextension.dll/codebase' (pas besoin de copier dans les fichiers de programme grâce à la base de code), 3) assurez-vous que le fichier iexplore.exe s'exécute en 64 bits, 4) assurez-vous que "Activer les processus 64 bits pour Enhanced Protected Mode" est coché dans IE/s Tools/Options/Advanced (FYI je n'ai pas "Enable Enhanced Protected Mode") "enable. –

+0

La méthode [ComRegisterFunction] me semble assez cassée, elle n'écrit que la clé BHO mais ne parvient pas à écrire les clés CLSID @Simon, comment l'avez-vous fait? Avez-vous fait la même chose que l'auteur de CodeProject? avoir fait et avoir une version du code sans le [ComRegisterFunction] au début? –

+0

@HansPassant - oui, j'ai oublié de dire que j'ai changé RegisterBHO en 'registryKey.OpenSubKey (guid, true);' pour pouvoir écrire la clé, mais c'est le seul changement que j'ai fait: Regasm 64 doit être lancé en tant qu'administrateur (comme d'habitude pour les changements dans HKLM) Plus configuration IE optio ns comme dans mes commentaires précédents. –

Répondre

-1

Regasm.exe (Assemblée de l'outil d'enregistrement) HERE

Vérifiez vos paramètres du projet pour compiler et vérifier que 64bit version d'IE ainsi. et exécutez-le en mode Administrateur.

Votre code est parfait. juste les paramètres du système et les configurations de compilation sont foiré,

ont également un coup d'œil à ce paramètre 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

Hope this vous aider !!

1

Il semble que cela ne fonctionne pas pour tout le monde, donc, je vais décrire ce que j'ai fait pour le faire fonctionner.

1) télécharger le projet exemple à partir d'ici: https://github.com/reinaldo13/ie-bho-extension

2) modifier la méthode RegisterBHO(...) dans BHO.cs

de:

RegistryKey ourKey = registryKey.OpenSubKey(guid); 

à:

RegistryKey ourKey = registryKey.OpenSubKey(guid, true); //we want to write the registry 

3) compiler le projet pour AnyCPU: propriétés du projet, sélectionnez AnyCPU pour la cible de la plateforme.

4) créer un .bat comme celui-ci, d'adapter yo votre chemin, et copier ce côté vos sorties 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 

Ce enregistrera la dll pour x86 et x64. Ceci est obligatoire pour avoir les deux version enregistrée sinon IE ne l'aimera pas (il se plaindra l'extension est 'incompatible'), car il ne sera pas en mesure de le démarrer en fonction de vos paramètres IE. Note Je suppose que vous pouvez avoir deux fichiers différents pour chaque version, mais AnyCPU de .NET n'en a pas besoin.

5) que l'exécution .bat comme admin, voici la sortie quand je fais ceci:

"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) exécuter iexplore.exe. Il peut fonctionner en fonction de vos paramètres (affiche un « hola !!! » messagebox), mais de toute façon, allez dans le menu Outils/Options Internet/Programmes/Gérer les modules complémentaires, ce que je vois:

enter image description here

Si l'extension est désactivée, vous devriez pouvoir l'activer (et redémarrer).

Si cela ne fonctionne pas (par défaut, cela ne devrait pas être le cas), assurez-vous que vous avez coché "Activer les processus 64 bits pour Enhanced Protected Mode *" (nécessite un redémarrage). Pour moi, le message est faux, il faut simplement dire « Activer les processus 64 bits » ...

enter image description here