Не удается заставить BHO работать в 64 бит

Я работаю над IE11 Browser Helper Object. Я получил это работает, когда я собираю его в x86. Проблема в том, что я хочу использовать проект на x64, расширение BHO не работает, когда оно построено на x64.

Расширение отображается на экране надстроек Internet Explorer, но всплывающее окно javascript не отображается.

DLL регистрируется с помощью x64-версии regasm через командную строку Visual Studio в качестве администратора, с / без /codebase а также /tlb но без результата. Раздел реестра успешно добавлен в мой реестр, но BHO просто не работает в IE. Я также попытался поместить файлы в подпапку Program Files, но она просто не работает.

Когда я запускаю свой IE в расширенном защищенном режиме, менеджер дополнений показывает, что мой BHO incompatible, но без EPM IE показывает enabled хотя это не работает

Я хотел бы, чтобы BHO работал на x64.

Я также попробовал этот проект BHO "hello world", но когда я изменяю его на x64 вместо x86, возникает та же проблема.

2 ответа

Кажется, это не работает для всех, поэтому я опишу, что я сделал, чтобы это работало.

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. Примечание. Я полагаю, у вас может быть два разных файла для каждой версии, но AnyCPU.NET не нуждается в этом.

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, Он может работать в зависимости от ваших настроек (отображает окно сообщения "HOLA!!!"), но в любом случае, зайдите в меню "Сервис" / "Свойства обозревателя" / "Программы" / "Управление надстройками", вот что я вижу:

Если расширение отключено, вы сможете включить его (и перезапустить).

Если это не работает (по умолчанию это не должно), убедитесь, что вы отметили "Включить 64-битные процессы для расширенного защищенного режима *" (требуется перезагрузка). Для меня сообщение неверно, оно должно просто сказать "Включить 64-битные процессы"...

Regasm.exe (Средство регистрации сборки) ЗДЕСЬ

Проверьте настройки проекта, чтобы скомпилировать его как 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

Надеюсь, это поможет вам!!

Другие вопросы по тегам