SidBySide:第三方Dll是指MSVCR80.DLL的两个版本 [英] SidBySide: 3rd Party Dll refers to two versions of MSVCR80.DLL

查看:164
本文介绍了SidBySide:第三方Dll是指MSVCR80.DLL的两个版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们包括一个第三方lib + DLL,最近在安装上造成了很多麻烦。使用依赖行者,我们发现dll本身是指两个不同版本的

  MSVCR80.DLL:
版本8.0.50727.4053和
版本8.0.50727.42
pre>

alt text http: //img101.imageshack.us/img101/1734/dependencywalk2.jpg



在MOST案例中,安装没有问题,即使我们分发了两个版本。但是在一些情况下,我们的安装不会启动。然后,我们从SideBySide管理器的Windows系统事件日志中找到消息:DLL的版本不匹配。在大多数情况下,这个问题可以解决,通过安装.NET框架(尽管我们不使用这个)。但是现在我们有一个这样没有帮助的情况。



我知道一个解决方案是将两个版本作为共享程序集安装,但似乎不是容易,除了我更喜欢一个更简单的解决方案。有没有人知道解决方法?



我可以以某种方式仅使用一个版本的Dll吗?



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

  D:\Develop\LEADTOOLS15\ patch_maifest> mt.exe -inputresource:ltkrn15u.dll;#1 -out:old.manifest 
Microsoft(R)Manifest工具版本5.2.3790.2075
版权所有(c)Microsoft Corporation 2005.
版权所有。

mt.exe:一般错误c101008c:无法从文件ltkrn15u.dll的资源读取清单。没有找到Ressource。

如果我使用完整路径查看dll依赖项,我看到以下内容:
alt text http://img340.imageshack.us/img340/4122/dependencywalk3.jpg



较低的MSVCR80.DLL是版本... 42中的一个。我不明白这一点。为什么MSVC P 80.DLL指的是与其他版本不同的MSVC R 80.DLL版本。这可能是依赖行为者的问题吗?

解决方案

您最好的选择是在应用程序安装程序包中发送所需的DLL。至少使用您的第三方DLL所依赖的版本。



Microsoft为其运行时DLL(vcredits_ *)提供独立安装程序。 VisualStudio 2005的最新版本可以下载此处。这也是您的DLL链接的版本。您可以从安装程序中静默地启动可重新分发的软件包。



作为已安装系统的手动解决方法,只需在目标计算机上应用redist安装程序。



如果您选择此方法,则不需要担心版本冲突,因为根据旧版本的应用程序将被重定向到始终使用最新版本。



为了更好的理解,你可以看看这个 MSDN文章


We include a 3rd Party lib+DLL that recently causes a lot of trouble on installations. Using dependencywalker, we found that the dll itself refers to two different Versions of

MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42

alt text http://img101.imageshack.us/img101/1734/dependencywalk2.jpg

In MOST cases installation makes no problems, even if we distribute none of both versions. But in a number of cases our installation just does not start. We then find messages in the windows system event log from the SideBySide manger: "Version of DLL does not match". In most cases again this problem can be resolved, by installing the .NET framework (although we do not use this). But now we have a case where this does not help.

I know that a solution would be, to install both versions as a shared assembly, but that seems not to be easy, and besides that i would prefer a much simpler solution. Does anybody know a workaround?

Can i somehow use only one version of the Dll?

EDIT: I now tried cristians advice:

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.

If i view the dlls dependencies with full paths, i see the following: alt text http://img340.imageshack.us/img340/4122/dependencywalk3.jpg

The lower MSVCR80.DLL is the one withe Version ...42. I dont understand this. Why does MSVCP80.DLL refer to a different Version of MSVCR80.DLL than the one besides it. Is that maybe a problem of the dependencywalker ?

解决方案

Your best option is to ship the needed DLLs within your applications installer package. Use at least the version that your 3rd party DLL depends on.

Microsoft offers standalone installers for its runtime DLLs (vcredits_*). The latest version for VisualStudio 2005 can be downloaded here. That is also the version that your DLL is linked against. You can silently launch the redistributable package from your installer.

As a manual workaround for already installed systems, simply apply the redist installer on the target machine.

If you choose this method, you don't need to be afraid of version conflicts, as applications depending on an older versions will be redirected to always use the most recent one.

For a better understanding you have look at this MSDN articles.

这篇关于SidBySide:第三方Dll是指MSVCR80.DLL的两个版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆