确定链接的dll版本

时间:2011-01-12 19:34:43

标签: windows dll

根据this article,引用的dll的版本嵌入在exe文件中。

使用ProcExp,我可以看到运行时加载的dll确实是我机器上可用的最新dll,但我很想知道链接版本。

作为旁注,我使用VS9 msbuild构建了项目,并对VC运行时(msvcr90.dll)版本感兴趣。在VC9 redist文件夹中,它是9.0.30729.1,运行时加载.4926。

我的问题是:

  • 是否有任何工具可以提取链接到的dll版本(来自dll / exe)?
  • 默认情况下VS链接到哪个版本?在redist文件夹中找到的那个?

谢谢。

2 个答案:

答案 0 :(得分:1)

Dependency Walker可能会这样做。

答案 1 :(得分:1)

实际上,Dependency Walker似乎没有读取(或至少显示)文件中链接的版本。

但我发现我可以使用Windows SDK中的mt.exe或ResEdit来阅读嵌入式清单。

另外,要总结我的发现(使用带有Windows SDK for Win7的msbuild定位amd64,似乎使用VS9(SP1?)库):

  • 在没有特别努力的情况下,CRT的VS9(非SP1)版本9.0.21022.8写在嵌入式清单中。也许这是一个VS9平台基准。
  • 根据SxS政策(良好阅读can be found here以及问题中引用的文章),运行时加载最新的dll。
  • 如果未安装相应的政策(例如通过redist包),人们似乎遇到了问题,请参阅here和[此处]以及4 [此处] 5。< / LI>
  • 后者SO告诉我如果定义了_BIND_TO_CURRENT_VCLIBS_VERSION=1,那么链接器将链接到VS9 SP1 CRT(版本9.0.30729.1),如前所述,它确实在redist文件夹中。

对于未来帐户,如果符合以下条件会很好:

  • 会有一张CRT版本为X.Y的表格。在OS / SP /等Z.W。
  • 中介绍
  • 如果有人知道什么是目标安全版本,默认情况下可能会在大多数用户计算机上使用。