SidBySide: сторонний Dll ссылается на две версии MSVCR80.DLL - PullRequest
2 голосов
/ 13 октября 2009

Мы включили стороннюю библиотеку lib + DLL, которая в последнее время вызывает много проблем при установке. Используя dependencywalker , мы обнаружили, что сама dll ссылается на две разные версии

MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42

альтернативный текст http://img101.imageshack.us/img101/1734/dependencywalk2.jpg

В большинстве случаев установка не вызывает проблем, даже если мы не распространяем ни одну из этих версий. Но в ряде случаев наша установка просто не начинается. Затем мы находим сообщения в системном журнале событий Windows из менеджера SideBySide: «Версия DLL не совпадает». В большинстве случаев снова эту проблему можно решить, установив .NET Framework (хотя мы не используем это). Но теперь у нас есть случай, когда это не помогает.

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

Могу ли я как-то использовать только одну версию Dll?

EDIT: Я сейчас попробовал совет христиан:

D:\Develop\LEADTOOLS15\patch_maifest>mt.exe -inputresource:ltkrn15u.dll;#1 -out:old.manifest
Microsoft (R) Manifest Tool version 5.2.3790.2075
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

mt.exe : general error c101008c: Failed to read the manifest from the resource of file "ltkrn15u.dll". Ressource not found.

Если я просматриваю зависимости DLL с полными путями, я вижу следующее: альтернативный текст http://img340.imageshack.us/img340/4122/dependencywalk3.jpg

Нижняя MSVCR80.DLL - это версия ... 42. Я не понимаю этого. Почему MSVC P 80.DLL ссылается на другую версию MSVC R 80.DLL, отличную от той, которая находится рядом с ней. Может быть, это проблема зависимого странника?

Ответы [ 2 ]

1 голос
/ 13 октября 2009

Ваш лучший вариант - отправить необходимые DLL-файлы в ваш установочный пакет приложений. Используйте хотя бы версию, от которой зависит ваша сторонняя DLL.

Microsoft предлагает автономные установщики для своих библиотек времени выполнения (vcredits_ *). Самую последнюю версию для VisualStudio 2005 можно загрузить здесь . Это также версия, с которой связана ваша DLL. Вы можете тихо запустить распространяемый пакет из установщика.

В качестве обходного пути для уже установленных систем просто примените установщик redist на целевой машине.

Если вы выберете этот метод, вам не нужно бояться конфликтов версий, так как приложения, зависящие от более старых версий, будут перенаправлены, чтобы всегда использовать самую последнюю версию.

Для лучшего понимания прочитайте статьи MSDN .

1 голос
/ 13 октября 2009

Вы должны изменить / обновить ресурс манифеста из библиотек.

mt.exe -inputresource:dll_with_manifest.dll;#1 -out:old.manifest
mt.exe -manifest new.manifest -outputresource:dll_with_manfiest.dll;#1

Иногда тип ресурса RT_MANIFEST (тип 24) не имеет индекса # 1 в таблице ресурсов, следует использовать средство просмотра ресурсов ( ResourceHacker или ResEdit ) и найти из номера индекса. Я видел случаи, когда манифест имеет номер индекса № 2.

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