Регистрация обработчика контекстного меню Windows, предоставляемого платформой Microsoft All-In-One (проект CppShellExtContextMenuHandler) - PullRequest
2 голосов
/ 11 сентября 2011

Я использовал пример проекта CppShellExtContextMenuHandler из фреймворка Microsoft All-In-One, чтобы добавить пользовательский элемент меню + значок в контекстное меню Windows.

Однако, похоже, я не могу зарегистрировать DLL, предоставляемую этим образцом, на других компьютерах, кроме моего.DLL, скомпилированная на компьютере под управлением Windows 7 x86 из неизмененного кода, не работает на:

  • Другой Windows 7 x86
  • Свежая установка Windows XP SP3 x86 на VirtualBox

Я получаю:

LoadLibrary (CppShellExtContextMenuHandler.dll) Не удалось найти указанную процедуру

(переведено) на компьютере XP

Не удалось загрузить модуль "CppShellExtContextMenuHandler.dll".

Убедитесь, что двоичный файл хранится по указанному пути, или отладьте его, чтобы проверить наличие проблем с двоичными или зависимыми файлами .DLL.

Указанный модуль не найден

на другом компьютере с Windows 7

Я использую Regsvr32 CppShellExtContextMenuHandler.dll в командной строке для регистрации DLL.

Кто-нибудь сталкивался с этой проблемой?Я что-то упустил (зависимости / конфиг проекта)?Я не уверен, как отладить это.

Спасибо за вашу помощь!

PS1: Код доступен здесь: http://1code.codeplex.com/releases/view/71395, в ./Visual Studio 2010 / CppShellExtContextMenuHandlerв упаковке.

PS2: скомпилированная версия образца находится здесь: https://fgt.bo/GmQ

1 Ответ

3 голосов
/ 11 сентября 2011

Наконец-то нашел ответ, благодаря Выбор метода развертывания на MSDN.

Чтобы файл DLL, скомпилированный из примера CppShellExtContextMenuHandler, работал на компьютерах не-dev, вам необходимо сопровождатьэто с библиотеками времени выполнения VC ++, от которых это зависит.

Я использовал замечательный инструмент на компьютере клиента (не dev), чтобы получить имя библиотеки DLL, от которой зависел мой обработчик контекстного меню (инструмент указывает, какие из них отсутствуют на компьютере arget!).

Оказалось, что мне пришлось распространять файлы msvcr100.dll и msvcp100.dll из [Program Files \ Microsoft Visual Studio 10.0 \ VC \ Redist] вместе с файлом CppShellExtContextMenuHandler.dll, чтобы он работал.

Чтобы заставить обработчик работать в Windows XP, мне также пришлось заменить два вхождения

hr = HRESULT_FROM_WIN32 (RegDeleteTree (...

by:

hr = SHDeleteKey (...

... в файле Reg.cpp. Фактически, в соответствии с C ++ Windows Shell contextПример обработчика меню , функция RegDeleteTree недоступна в XP. SHDeleteKey эквивалентен и может быть найден в Shlwapi.h, во всех версиях окон, которые я тестировал.

Спасибо, что уделили времяи пытаюсь решить это!

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