如何处理缺少的 dll,如 msvcp100.dll、msvcp100.dll?

Posted

技术标签:

【中文标题】如何处理缺少的 dll,如 msvcp100.dll、msvcp100.dll?【英文标题】:How to do I with missing dlls like msvcp100.dll, msvcp100.dll? 【发布时间】:2016-01-29 19:40:42 【问题描述】:

用户机器可能没有msvcp100.dll、msvcp100.dll等dll的情况如何处理?我不希望我的软件因为这种错误而没有安装在用户的机器上。我一直在考虑找到一个工具并将每个需要的 dll 复制到运行的可执行文件中,或者尝试构建一个static version of Qt(最后可能有相同的结果)。我见过不提供这些 dll 的应用程序,并且由用户来获取、安装等。对于这些用户来说,找到正确的 dll 匹配版本等等可能是个问题。我想避免它。

这在现实世界的应用程序中通常如何解决?

【问题讨论】:

我为我的每个 Qt 应用程序创建了一个 NSIS 安装程序,并将 Visual Studio 可再发行组件作为安装的可选组件包含在内。虽然我的 Qt 版本是基于 CMake 的。 【参考方案1】:

你在你的安装程序中redistribute他们。

【讨论】:

【参考方案2】:

Qt 应用程序的部署是一个不容易的问题。应该明白,您需要重新分发编译器的 dll 以及 Qt dll。对于 msvc 2010 编译器,您只需将 msvcp100.dllmsvcr100.dll 文件放在可执行文件附近即可。 至于 Qt,windows 部署最简单的方法是使用windeployqt 命令提示实用程序。

更新。 这在实际应用程序中通常如何解决?没有全自动工具,可以确定所有依赖关系,因为应用程序的部署是一项复杂的任务。例如,您的应用程序可能依赖于许多东西,例如库 dll、编译器的 dll、注册表项、驱动程序、环境变量、计算机重启要求、ActiveX/COM 组件、其他已安装的应用程序等... 但是有一些工具可以帮助你解决这个问题。 它们可以为目标项目配置一次,然后一直工作。这叫Build Automation,另一个类似的概念是Continuous Integration至于为最终用户创建安装包,有很多工具如Nullsoft Scriptable Install System、Inno Setup、Qt Installer Framework、WiX等...List of installation software.

【讨论】:

我在帖子中提到的 dll 只是示例。我正在考虑找到一种工具来自动完成这项工作。我只是想知道其他人是如何做到的。我已经在使用 windeployqt,但它不会复制我提到的那些 ms* dll。我是否遗漏了某些东西或 util 只处理 Qt 的 dll?【参考方案3】:

安装程序脚本,放一条命令下载应用程序需要运行的dll,并在应用程序源代码中,把它使用dll的只有在它运行的文件夹中 如果您使用的是 NSI 安装程序,请使用此 example

【讨论】:

以上是关于如何处理缺少的 dll,如 msvcp100.dll、msvcp100.dll?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 VBA 中的 DLL 错误?

如何处理 laravel 社交名媛“缺少授权异常”

DLL 如何处理来自多个进程的并发?

如何处理外部dll中的连接字符串?

如何处理 Entity Framework 中缺少主键的问题?

由于第三方库,如何处理 AppStore 警告 - 缺少目的字符串?