Создание расширения оболочки Windows в Visual Studio 2010 - PullRequest
14 голосов
/ 08 сентября 2010

Я пытаюсь создать абсурдно простое расширение оболочки в C ++ с использованием Visual Studio 2010, но я даже не могу заставить примеры работать там как отправную точку.

Яс использованием Windows 7 x64.

Я пробовал этот шаблон Visual Studio , но как только я заставил шаблон работать в VS2010, у меня появилось множество ошибок, которые я не знаю, какисправить.

Я попробовал Полное руководство для написания расширений оболочки для идиота , и после того, как демо-версия скомпилировала все необходимые настройки реестра и т. д., но контекстное меню не появилось.

Я смотрел на этот пример C # COM Interop , но я был озадачен безопасностью использования C # благодаря этой статье *, ноПохоже, что я могу быть в порядке, если я использую .NET 4, потому что он поддерживает в процессе параллельного хостинга CLR .

  • короче: исторически две версии .NETне может быть запущен в одном и том же процессевступить в процесс.Поэтому, если .NET 3.5 внедряется в процесс .NET 2 - bang

Итак, могу ли я использовать .NET 4.0 сейчас?

Есть ли работающийзагружаемое решение VS2010, которое добавляет простое расширение оболочки?

Раньше я был не так уж и плох с C ++, но после многих лет разработки в .NET я довольно ржавый, и, как таковой,возиться с деталями, чтобы исправить множество ошибок, которые я получаю на существующих примерах, доказывает ... беспристрастно!

Я действительно мог бы начать с чистого листа, чтобы начать с того, что я могу сломаться и разобратьсячто я сделал не так!

Ответы [ 4 ]

7 голосов
/ 22 января 2012

Я некоторое время боролся с этим и имел ограниченный успех со статьей проекта кода из-за проблем с x64 и различий в SDK.

Я недавно поднял проект и начал заново, используя MS все-в-один пример кода, и я очень рад.Это простой пример контекстного меню, и x64 работает из коробки: http://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a

Чтобы запустить его на своей машине:

  1. скачайте код через многофункциональное устройство.один пример браузера или используйте прямую ссылку.
  2. Откройте проект в VS под правами администратора
  3. переключите конфигурацию сборки на x64 и соберите ее
  4. Убейте все сессии проводника
  5. Найдите новую dll и запустите regsvr32.exe. \ CppShellExtContextMenuHandler.dll
  6. снова откройте проводник и щелкните правой кнопкой мыши файл .cpp, чтобы увидеть новое меню
  7. удалите его, выполнив ту же команду с/ u flag

Мой следующий шаг - заставить работать отладку, и я думаю, что это может помочь: msdn

1 голос
/ 26 февраля 2011

В Windows 7 x64 для расширения C ++ вам необходимо создать его как проект x64.В Visual Studio 2010 в мастере ATL есть возможность создать проект расширения оболочки, который обеспечивает поддержку окна предварительного просмотра, миниатюры и поддержку поиска Windows.Я недавно использовал это и однажды построил, казалось, ничего не случилось.Однако, переключив конфигурацию проекта на сборку x64 dll, он заработал.

Что касается использования .Net - Explorer теперь запускает плагины в отдельном подпроцессе.Таким образом, загрузка расширения оболочки, которое ссылается на .net 4.0, не загрязняет все вместе с этой версией .net, поскольку только подпроцесс хостинга будет фактически загружать этот CLR.Вы можете увидеть это, используя расширение предварительного просмотра, поскольку новый процесс (prevhost) запускается, чтобы содержать это.

0 голосов
/ 05 сентября 2017

Короткий ответ на вопрос «могу ли я использовать C #» - нет. Это из руководства Microsoft по внедрению внутрипроцессных расширений. «Одна особая среда выполнения - это общеязыковая среда выполнения (CLR), также известная как управляемый код или .NET Framework. Microsoft не рекомендует писать управляемые внутренние расширения в Windows Explorer или Windows Internet Explorer и не считает их поддерживаемым сценарием. «. Проблема возникает из-за того, что в приложении может использоваться только одна версия .NET, и нет возможности применить это ограничение, если используется несколько расширений .NET.

0 голосов
/ 01 августа 2013

У меня есть этот рабочий: 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, которую вы использовали для компиляции.)

Обратите внимание, что Microsoftне рекомендует использовать .NET для расширений оболочки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...