Расширение оболочки контекстного меню не работает в 64-разрядной версии Windows 7

Я создал очень простое контекстное меню, используя расширение оболочки в C#. Он отлично работает в 32-разрядной версии Windows XP, но в 64-разрядной версии Windows 7 элементы меню не отображаются.

Я попытался настроить вывод программы установки на x64, но безрезультатно.

Simple Source содержит ContextMenu, а проект установки находится здесь.

Похоже, Wow6432 должен обрабатываться проектом установки, то же самое для регистрации и добавления в глобальный кэш сборок.

Буду признателен за помощь/предложения по этому вопросу.


person Paweł Smejda    schedule 13.04.2010    source источник


Ответы (3)


Я настоятельно рекомендую вам держаться подальше от любого кода, написанного Эспозито. Как обычно, его объявления P/Invoke в папке ShellExt совершенно неверны, они не могут работать в 64-битном коде. Во-первых, публикация этого кода была очень безответственной, расширения оболочки никогда не должны использовать версию .NET CLR до 4.0. Посетите pinvoke.net, если хотите его спасти.

person Hans Passant    schedule 13.04.2010
comment
Я написал это на С++ в соответствии с рекомендациями, никаких проблем, спасибо за полезный совет :) - person Paweł Smejda; 15.04.2010

Проверьте платформу DLL в Visual Studio и убедитесь, что она 64-разрядная. 64-битные процессы не могут загружать 32-битные библиотеки DLL в пространство своего процесса (и, естественно, наоборот).

Чтобы создать 64-разрядную версию библиотеки DLL, используйте диспетчер конфигурации Visual Studio для создания новой платформы решения. Выберите X64 (вместо X86 или любой другой платформы) и перестройте проект. Существуют также переключатели командной строки для Компилятор C#, если вы используете скриптовые сборки.

person John Rudy    schedule 13.04.2010
comment
Я также пробовал это, но тогда у меня было необработанное исключение BadImageFormatException, и рекомендуемое решение для этого - изменить сборку для x86. - person Paweł Smejda; 13.04.2010
comment
Каковы ваши ссылки? Вы ссылаетесь на какие-либо 32-битные библиотеки DLL в своем проекте? Это ограничит вашу совместимость с 64-битным проводником Windows. - person John Rudy; 13.04.2010
comment
Я использую ShellExtension, поэтому верю, что он использует Shell32.dll, которая является 32-разрядной DLL. - person Paweł Smejda; 13.04.2010

У меня была такая же проблема. Вам нужно изменить InstallUtil.dll в установочном файле. Я написал статью в своем блоге об этом. http://artyomgrigor.wordpress.com/2010/10/06/register-shell-extension-context-menu-also-on-windows-x64-part-2/

person Artyom    schedule 13.10.2010