Создание расширения оболочки Windows в Visual Studio 2010
Я пытаюсь создать абсурдно простое расширение оболочки в С++ с помощью Visual Studio 2010, но я даже не могу привести примеры для работы в качестве отправной точки.
Я использую Windows 7 x64.
Я пробовал этот шаблон Visual Studio, но как только я получу шаблон для работы в VS2010, у меня есть множество ошибок, которые я Не знаю, как исправить.
Я пробовал Полное руководство для идиотов по написанию расширений оболочки и после демонстрации всех необходимых настроек реестра и т.д. контекстное меню не отображается.
Я посмотрел на этот пример С# COM Interop, но меня оставили в замешательстве относительно того, безопасно ли использовать С# спасибо в в этой статье *, но похоже, что я могу быть ОК, если я использую .NET 4, потому что он поддерживает в процессе бок о бок CLR-хостинг.
- Короче: исторически две версии .NET не могут работать в одном и том же процессе, а работа оболочки оболочки заключается в том, что они внедряются в процесс. Поэтому, если .NET 3.5 впрыскивается в процесс .NET 2 - bang
Итак, могу ли я теперь использовать .NET 4.0?
Есть ли работающее, загружаемое решение VS2010, которое добавляет простое расширение оболочки?
Раньше я был не так плохой с С++ в тот же день, но после нескольких лет литья в .NET я довольно ржавый и, таким образом, возился с деталями, чтобы исправить множество ошибок, которые я получаю существующие примеры доказывают... fiddly!
Я мог бы действительно сделать с чистым списком, чтобы начать с того, что я могу сломать себя и выяснить, что я сделал не так!
Ответы
Ответ 1
Я боролся с этим некоторое время и имел ограниченный успех в статье проекта кода из-за проблем x64 и различий в SDK.
Недавно я выбрал проект и начал работу с примера кода MS все-в-одном, и я очень доволен. Это простой пример контекстного меню, и x64 работает из коробки: http://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a
Чтобы запустить его на вашем компьютере:
- загрузите код через браузер образца "все-в-одном" или используйте прямую ссылку.
- Открыть проект в VS под правами администратора
- установить конфигурацию сборки на x64 и создать ее
- Убить все сеансы проводника.
- Найдите новую dll и запустите regsvr32.exe.\CppShellExtContextMenuHandler.dll
- снова откройте проводник и щелкните правой кнопкой мыши файл .cpp, чтобы увидеть новое меню.
- удалите его, выполнив ту же команду с флагом /u
Мой следующий шаг - получить отладочную работу, и я думаю, что это может сделать трюк: msdn
Ответ 2
В Windows 7 x64 для расширения С++ вам нужно создать его как проект x64. В Visual Studio 2010 в Мастере ATL есть опция для создания проекта расширения оболочки, который обеспечивает поддержку окна предварительного просмотра, миниатюр и поддержку поиска Windows. Я недавно использовал это и когда-то построенный, ничего не случилось. Однако при переключении конфигурации проекта на сборку dll x64 он работал.
Что касается использования .Net - Explorer теперь запускает плагины в отдельном подпроцессе. Поэтому загрузка расширения оболочки, которая ссылается на .net 4.0, не загрязняет все с помощью этой версии .net, так как только хостинг-подпроцесс фактически загрузит эту среду CLR. Вы можете увидеть это, используя расширение предварительного просмотра, поскольку новый процесс (prevhost) запускается, чтобы содержать это.
Ответ 3
Я получил эту работу: http://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang
Убедитесь, что вы используете правильный RegAsm.exe
для его/регистрации:
- 32-разрядные платформы: компиляция для x86/любого процессора. Используйте
C:\Windows\Microsoft.NET\Framework\vXYZ\RegAsm.exe
.
- 64-разрядные платформы: компиляция для x64/любого процессора. Используйте
C:\Windows\Microsoft.NET\Framework64\vXYZ\RegAsm.exe
.
(XYZ
- это версия .NET Framework, которую вы использовали для компиляции.)
Обратите внимание, что Корпорация Майкрософт рекомендует не использовать .NET для расширений оболочки.
Ответ 4
Короткий ответ на ваш вопрос "могу ли я использовать С#" - нет. Это из руководства Microsoft по внедрению внутрипроцессорных расширений. "Одно время выполнения конкретной заметки - это общая среда выполнения CLR (CLR), также известная как управляемый код или .NET Framework. Microsoft рекомендует не записывать управляемые встроенные расширения в Windows Explorer или Windows Internet Explorer и не считает их поддерживаемым сценарием".
Проблема возникает из-за того, что в приложении может быть использована только одна версия .NET, и нет возможности применить это ограничение, если используются несколько расширений .NET.