有没有办法以编程方式检查EXE的依赖关系?

时间:2013-06-30 16:05:42

标签: winapi language-agnostic

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

当我意外地使用Debug配置构建和分发安装程序包时,已经有几次,因为用户没有安装,所以安装后无法运行有特殊的DLL。我希望能够防止将来发生这种情况。

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

1 个答案:

答案 0 :(得分:1)

您可以阅读PE导入表以了解加载时需要哪些DLL。这就是Dependency Walker所做的,以及Microsoft Platform SDK中包含的dumpbin工具(由Visual Studio安装,也可以单独下载)。一些debughelp API提供对PE头信息的访问,但为什么不调用dumpbin工具并检查其输出?由于它是基于文本的非交互式,因此集成到安装程序构建过程中应该非常简单。 Dependency Walker also has a capability to run in non-interactive mode with text output

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

相关问题