从多个 DLL 版本中选择

Choosing from multiple DLL versions

今天我构建了我的应用程序并使用 QtIF 打包了安装程序。它在我的电脑上运行良好,但抱怨在另一台电脑上丢失 msvcp140_1.dll

然后我运行 find . -iname "msvcp140_1.dll"在我的电脑上发现了五个以上不同的,我检查了md5sum。

然后我花时间在另一台计算机上尝试了所有这些,似乎一切正常。不再抱怨缺少 DLL。

我该如何选择DLL?随便选一个似乎太简单了。

有没有办法检查 DLL,检查版本?

我认为 DLL 是我应用程序中包含的另一个二进制文件的依赖项,并不是 QtIF 未能包含它。

从您的安装程序调用 MS Redist 安装程序。这可以悄悄地完成,这样最终用户就不会注意到它。

  • 找到 vcredist_x64.exe 文件(或 vcredist_x32 32 位应用程序),将其添加到您的安装程序,
  • 让它解压到“TEMP”文件夹
  • 然后在安装结束时调用 vcredist_x64.exe /quiet

这有几个优点:

  • 您一定会将所有需要的文件复制到用户计算机上。
  • 如果 运行time 库的新版本由 Microsoft 发布并且它们已经在您的用户计算机上,您的代码将使用较新的版本,其中可能包含错误修复。
  • Windows更新也可能会更新库。

也就是说,可以自己复制 DLL,但您应该确保 a)你选择了正确的 b) 它们来自一个值得信赖的地方,即你的 VS 安装文件夹 c) 与可执行文件位于同一目录中 - 否则您将 运行 遇到清单问题。

您可能希望直接包含 DLL 的原因是您希望减小安装程序的整体大小。

我们用我们的产品做了几年,但最终放弃并简单地使用了 vcredist_x64.exe,即使这增加了安装程序二进制文件的大小另外几 MB。但从长远来看,运行 这是最简单的方法。

我认为(不确定),msvcp140_1.dll 是 VS 2019 运行 时间的附加 DLL。 VS 2017 运行时间不需要这个,但是新的需要。

不可再分发的方法是运送 您的 编译器附带的 DLL,即构建您的可执行文件的编译器。毕竟,DLL 将被加载到与您的 EXE 相同的进程中。这些应该匹配是合乎逻辑的。

您会在 \Program Files*\Microsoft Visual Studio *\VC\Redist

中找到这些 DLL