1

我有一个特定的项目,我构建并分发给用户。我有两个构建配置,调试和发布。显然,Debug 是供我在调试时使用的,但还有一个额外的问题:Debug 配置使用了一个特殊的调试内存管理器,它依赖于一个外部 DLL。

有几次我不小心构建并分发了带有调试配置的安装程序包,然后安装后无法运行,因为用户没有特殊的 DLL。我希望能够防止这种情况在未来发生。

我知道我可以通过运行 Dependency Walker 来获取程序中的依赖项,但我正在寻找一种以编程方式完成它的方法。具体来说,我有一种在创建安装程序时运行脚本的方法,我想要一些可以放入安装程序脚本的东西来检查程序并查看它是否依赖于这个 DLL,如果是,则导致安装程序创建过程因错误而失败。我知道如何创建一个简单的 CLI 程序,它将两个文件名作为参数,并且可以运行一个DependsOn函数并根据它的结果创建输出,但我不知道在DependsOn函数中放入什么。有谁知道我会怎么写?

4

1 回答 1

1

您可以阅读 PE 导入表以了解加载时需要哪些 DLL。这就是 Dependency Walker 所做的,也是dumpbinMicrosoft Platform SDK 中包含的工具(由 Visual Studio 安装,也可以单独下载)。一些调试帮助 API 提供对来自 PE 标头的信息的访问,但为什么不调用该dumpbin工具并检查其输出呢?由于它是基于文本的非交互式的,它应该非常简单地集成到您的安装程序构建过程中。 Dependency Walker 还具有以文本输出的非交互模式运行的能力

如果您确实需要在没有任何其他工具的帮助下检索信息,那么该ImageDirectoryEntryToDataEx功能是一个很好的起点。此外,这里有一个问题显示了如何手动进行(但请改用 ImageHlp,它知道 PE 格式的所有各种变体):

于 2013-06-30T16:11:36.940 回答