Я написал расширение оболочки в Visual Studio 2010.
Он реализует обработчик контекстного меню и обработчик значков файлов.
На компьютере с Visual Studio это работает хорошо. Но на других компьютерах регистрация MyShellExt.dll завершается с сообщением
[Название окна]RegSvr32
[Содержание]Модуль «MyShellExt.dll» не удалось загрузить.
Убедитесь, что бинарный файл хранится по указанному пути, или отладьте его в
проверьте наличие проблем с двоичными или зависимыми файлами .DLL.Указанный модуль не может быть найден.
[ХОРОШО]
я проверил зависимости и обнаружил, что следующие файлы должны находиться в одной папке с MyShellExt.dll: msvcr100.dll, msvcp100.dll, atl100.dll.
Это означает, что я должен включить эти библиотеки в мой установочный пакет.
Как отключить использование этих библиотек?
Этими библиотеками являются среда выполнения C, среда C ++ и среда ATL. Вы не можете отключить первые два с тех пор, как они необходимы для запуска вашей программы. Однако вы можете ссылаться на них статически, чтобы вам не приходилось переносить их как библиотеки DLL. Для этого перейдите в настройки своего проекта C / C ++, Генерация кода, Библиотека времени выполнения и выберите «Многопоточная» или «Многопоточная отладка» вместо «Многопоточная DLL» или «Многопоточная отладочная DLL». Обязательно сделайте это во всех конфигурациях настроек (Debug, Relaese и т. Д.)
Что касается 3-й библиотеки (ATL100.dll), на нее могут повлиять и эти настройки, я не уверен. вы можете удалить, если прекратите использовать импортированную из него функцию. Обходчик зависимостей может сказать вам, какие функции вы используете из этой библиотеки. Если вы не можете прекратить использование этой функции, возможно, что библиотека также имеет статическую версию (файл .lib вместо файла .dll)
Других решений пока нет …