Создание расширения оболочки 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.