Не удается заставить 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
Надеюсь, это поможет вам!!