【发布时间】:2020-06-28 07:02:18
【问题描述】:
我们知道,当尝试运行缺少一些依赖 DLL 的程序时,系统会抱怨“缺少 dll”错误。我用来避免这种情况的方法是将所有依赖的 DLL 打包到安装程序中,以便该软件可以在其他设备上运行。然而随着依赖的DLL越来越多,手动搜索和复制DLL变得如此繁琐,尤其是考虑到这些直接依赖的DLL可能有自己的依赖关系。
我知道dumpbin、Dependency Walker 和Dependencies 可以跟踪 DLL 依赖关系。但他们只列出了依赖的 DLL。我想知道是否有任何命令/脚本/工具可以:
- 递归搜索可执行文件的依赖 DLL
- 将这些依赖项复制到指定目录
- 最好支持从指定目录中排除DLL,如
C:\WINDOWS\system32\
说实话,我不知道这种事情是否存在。如果没有,你们如何处理这个 DLL 问题?
【问题讨论】:
-
您实际上想解决什么问题?这对我来说就像一个XY Problem
-
该工具不存在。它不能存在,因为并非所有依赖项都可以静态发现。 我如何处理这个问题?我设置了 CI,并确保在干净的系统上测试安装程序。
-
@Jabberwocky 好吧,我想做的是以安装程序的形式发布我的软件。显然,我不希望用户在安装后尝试运行软件时遇到“缺少 DLL”错误。为了达到这个目标,我使用 Dependencies 来找出 DLL 依赖项,手动将这些 DLL 复制出来,然后将它们添加到我的安装程序项目中。它确实解决了我的问题,但这样的过程既乏味又容易出错。所以,我的问题可以概括为,在尝试发布 EXE 时,有没有更好的方法来处理 DLL 依赖关系?
-
因为它是您想要安装的您的软件,您已经知道您的软件使用了哪些dll。只需分发这些 dll。对于各种系统 dll,您可能需要以 Microsoft redistributables 的形式分发它们。
-
只是检查你是否见过this answer。 Procmon 和 NDepend 应该值得一看高级依赖调试。
标签: c++ windows installation setup-deployment