【问题标题】:Determine version of dll linked against确定链接的 dll 版本
【发布时间】:2011-06-08 01:47:11
【问题描述】:

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

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

附带说明一下,我使用 VS9 msbuild 构建了项目,并且对 VC 运行时 (msvcr90.dll) 版本感兴趣。在 VC9 redist 文件夹中它是 9.0.30729.1,运行时加载了 .4926。

我的问题是:

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

谢谢。

【问题讨论】:

    标签: windows dll


    【解决方案1】:

    Dependency Walker 可能会这样做。

    【讨论】:

    • 啊!我没有在信息窗口中向右滚动到足够远的距离来查看它。谢谢!
    • 如果没有清单/其他设置,默认链接版本如何?链接器从哪里获得版本(显然不是 redist - 也许是系统最新版本)?
    【解决方案2】:

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

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

    另外,总结我的发现(针对 amd64 使用 msbuild 和适用于 Win7 的 Windows SDK,它似乎使用 VS9(SP1?)库):

    • 无需特别努力,CRT 的 VS9(非 SP1)版本 9.0.21022.8 将写入嵌入式清单中。也许这是一个 VS9 平台基线。
    • 根据 SxS 策略运行时加载最新的 dll(请阅读 can be found here,以及问题中引用的文章)。
    • 如果没有安装适当的策略(例如通过 redist 包),人们似乎会遇到问题,请参阅 here 和 [这里] 和 4[这里]5
    • 后一个 SO 表明如果定义了 _BIND_TO_CURRENT_VCLIBS_VERSION=1,则链接器将链接到 VS9 SP1 CRT(版本 9.0.30729.1),如前所述,它确实位于 redist 文件夹中。

    对于未来的帐户,如果:

    • 会有一个 CRT 版本 X.Y 的表。在 OS/SP/etc Z.W. 中引入。
    • 如果有人知道什么是安全的目标版本,默认情况下大多数用户的机器上都可能有这个版本。

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2019-11-10
      • 2015-09-17
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多