windows 查找dll的顺序 问题:

bsnry 2014-05-29 03:43:28

windows 查找dll的顺序 问题:



vs2005开发了一个程序,其依赖一些dll,手工拷贝到了 目标机子上“当前目录”下, 结果依然无法运。


不要说这是是版本不一致导致的。



dll是从开发机器上拷贝过去的, 所以不存在版本问题。


问题2:
用dependency walker看过, 其中一个dll: msvcr90.dll 。 宿主程序exe会加载 winsxs目录下的msvcr90.dll,

当前目录下已经有 msvcr90.dll 这个dll, 为什么不会加载当前目录下的 msvcr90.dll ?


...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2014-05-30
  • 打赏
  • 举报
回复
引用 9 楼 Saleayas 的回复:
[quote=引用 8 楼 Saleayas 的回复:] 不要意思,记错了 msvrt 不属于KnownDlls
msvcrt.dll[/quote] http://bbs.csdn.net/topics/390801326 看姊妹贴,看这个
Saleayas 2014-05-30
  • 打赏
  • 举报
回复
引用 8 楼 Saleayas 的回复:
不要意思,记错了 msvrt 不属于KnownDlls
msvcrt.dll
Saleayas 2014-05-30
  • 打赏
  • 举报
回复
不要意思,记错了 msvrt 不属于KnownDlls
bsnry 2014-05-30
  • 打赏
  • 举报
回复
引用 6 楼 Saleayas 的回复:
知名的 dll, 微软 是不允许乱加载的。
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> 这是exe末尾的内容, 发现没有 Microsoft.VC80.CRT 有多个版本? 表示什么意思? 其他项只有一个版本。
Saleayas 2014-05-30
  • 打赏
  • 举报
回复
知名的 dll, 微软 是不允许乱加载的。
shen_wei 2014-05-30
  • 打赏
  • 举报
回复
dll 你放在Windows/system32 里面就自动加载了。。
bsnry 2014-05-30
  • 打赏
  • 举报
回复
引用 楼主 bsnry 的回复:
windows 查找dll的顺序 问题: vs2005开发了一个程序,其依赖一些dll,手工拷贝到了 目标机子上“当前目录”下, 结果依然无法运。 不要说这是是版本不一致导致的。 dll是从开发机器上拷贝过去的, 所以不存在版本问题。 问题2: 用dependency walker看过, 其中一个dll: msvcr90.dll 。 宿主程序exe会加载 winsxs目录下的msvcr90.dll, 当前目录下已经有 msvcr90.dll 这个dll, 为什么不会加载当前目录下的 msvcr90.dll ?
引用 1 楼 oyljerry 的回复:
还要带上manifest来指定dll版本。这样就会找当前目录
引用 3 楼 bsnry 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 还要带上manifest来指定dll版本。这样就会找当前目录
请教一个问题: 开发机子上 程序连接的dll的版本和 从程序自带的清单版本不一致,也可以运行,说明 版本做了跳转。 跳转的原理,暂且不说。 那么程序发布的时候, 清单文件。 Microsoft.VC80.MFC.manifest里的版本号,是填写: 程序嵌入的清单文件版本号,还是 填写“ 连接的dll的版本号” 这里的“ 连接的dll的版本号” 指的是,用dependency waker 看到的winsxs中的dll。 我知道winsxs做了跳转, 但是发布的时候, 我应该填写哪一个版本[/quote]
引用 3 楼 bsnry 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 还要带上manifest来指定dll版本。这样就会找当前目录
请教一个问题: 开发机子上 程序连接的dll的版本和 从程序自带的清单版本不一致,也可以运行,说明 版本做了跳转。 跳转的原理,暂且不说。 那么程序发布的时候, 清单文件。 Microsoft.VC80.MFC.manifest里的版本号,是填写: 程序嵌入的清单文件版本号,还是 填写“ 连接的dll的版本号” 这里的“ 连接的dll的版本号” 指的是,用dependency waker 看到的winsxs中的dll。 我知道winsxs做了跳转, 但是发布的时候, 我应该填写哪一个版本[/quote] 为什么 某些机器上安装部署库后, 9.0.30729.4148 手工将winsxs里的那些dll, 拷贝到当前目录下,然后将winsxs里对应的mainfest拷贝到当前目录, 再手工卸载部署库, 结果就无法运行。 有人可能会说, 部署库里的版本和程序版本可能不一致,部署库做了跳转。 是的, 确实做了跳转,可是把程序内嵌的版本的dll放到当前目录下, 也无法运行。
bsnry 2014-05-30
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
还要带上manifest来指定dll版本。这样就会找当前目录
请教一个问题: 开发机子上 程序连接的dll的版本和 从程序自带的清单版本不一致,也可以运行,说明 版本做了跳转。 跳转的原理,暂且不说。 那么程序发布的时候, 清单文件。 Microsoft.VC80.MFC.manifest里的版本号,是填写: 程序嵌入的清单文件版本号,还是 填写“ 连接的dll的版本号” 这里的“ 连接的dll的版本号” 指的是,用dependency waker 看到的winsxs中的dll。 我知道winsxs做了跳转, 但是发布的时候, 我应该填写哪一个版本
oyljerry 2014-05-29
  • 打赏
  • 举报
回复
还要带上manifest来指定dll版本。这样就会找当前目录

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧