SidBySide:第三方的Dll指MSVCR80.DLL的两个版本(SidBySide: 3rd

2019-08-17 23:05发布

我们有一个第三方的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

在大多数情况下,安装是没有问题的,即使我们没有发布两个版本的。 但是,在许多情况下,我们的安装只是不启动。 然后,我们发现从SideBySide马槽Windows系统事件日志消息:“DLL的版本不匹配”。 在大多数情况下,再次这个问题可以通过安装.NET Framework(尽管我们不使用这个)来解决。 但是现在我们有了这个地方没有帮助的情况下。

我知道,一个解决办法是,安装两个版本的共享组件,但似乎不是容易的,除此之外我宁愿一个更简单的解决方案。 是否有人知道一个解决方法吗?

我能以某种方式使用DLL的只有一个版本?

编辑:我现在试着cristians建议:

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的。 是,也许dependencywalker的问题?

Answer 1:

最好的选择是运输您的应用程序安装包内所需的DLL。 至少使用与您的第三方DLL取决于版本。

微软提供了独立安装其运行时的DLL(vcredits_ *)。 2005年VisualStudio的最新版本可以下载在这里 。 这也是您的DLL对链接的版本。 你可以默默地从您的安装启动再发行组件包。

对于已经安装的系统,手动解决办法,简单地套用在目标机器上的REDIST安装程序。

如果您选择这种方法,你不必害怕版本冲突,因为这取决于一个旧版本的应用程序将被重定向到总是使用最新的一个。

为了更好地理解你看看这个MSDN文章 。



Answer 2:

你必须改变/更新从DLL文件的清单资源。

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索引号。



文章来源: SidBySide: 3rd Party Dll refers to two versions of MSVCR80.DLL