【问题标题】:Can I bundle the Visual Studio 2015 C++ Redistributable DLL's with my application?我可以将 Visual Studio 2015 C++ Redistributable DLL 与我的应用程序捆绑在一起吗?
【发布时间】:2016-05-07 22:28:12
【问题描述】:

我使用 Microsoft Visual Studio 2015 Community Edition 构建了一个 C++ 应用程序。我正在使用 Advanced Installer 来确保 Visual C++ Redistributable for Visual Studio 2015 是先决条件。

但是,可再发行组件的安装程序并不完美。我的一些用户报告说可再发行安装程序挂起,或者安装失败,然后用户收到“此程序无法启动,因为您的计算机中缺少 MSVCP140.dll”错误。

据微软称,I can now package the redistributable DLLs along with my application, though they don't recommend it:

要部署可再发行的 Visual C++ 文件,您可以使用 Visual Studio 中包含的 Visual C++ 可再发行包(VCRedist_x86.exe、VCRedist_x64.exe 或 VCRedist_arm.exe)。 ... 也可以直接在应用程序本地文件夹中安装可再发行的 Visual C++ DLL,该文件夹是包含可执行应用程序文件的文件夹。出于维修原因,我们不建议您使用此安装位置。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT 中有 4 个文件。这是否意味着我只需在安装过程中将它们复制到我的应用程序目录?

  • MyApp.exe
  • concrt140.dll
  • msvcp140.dll
  • vccorlib140.dll
  • vcruntime140.dll

这样可以吗?我需要出示执照吗?为什么没有更多的人这样做,而不是要求再次预安装可再发行组件?

【问题讨论】:

  • Hmya,redist 安装程序就像煤矿中的金丝雀。当目标机器过度充气时,它就是那台机器。当然,他们会为此烦恼您,但是当您使用本地部署时,他们不会打扰您,而是您的安装程序或主程序会崩溃。这不会让你领先,当它是一个无法完成的 Microsoft 程序时,你至少有合理的否认 :) 告诉他们暂时禁用他们的反恶意软件,所有你能做的都是合理的。

标签: c++ windows visual-studio dll visual-studio-2015


【解决方案1】:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT 中有 4 个文件。这是否意味着我只需在安装过程中将它们复制到我的应用程序目录?

是的,你引用的段落就是这个意思。

这样可以吗?我需要出示执照吗?为什么没有更多的人这样做,而不是要求再次预安装可再发行组件?

从技术上讲,这是可以的。如果你想学究气,你可以在readmehelp/about 中包含一条注释,大意是VC++ 2015 redistributables provided in "local deployment" mode 是微软的Deployment in Visual C++ 明确允许的(在@ 有更多指向文件列表和许可证的链接987654322@).

至于为什么更多人不这样做,我猜(在那些完全关心的人中):

  • 对于像MyApp.exe 这样的单模块应用程序,使用静态链接的所有内容构建它会更容易,因为从一开始就消除了外部依赖;
  • 包括这些文件会从分发(可能是下载)大小中节省 1+ MB;
  • 使用运行时的私有副本运行 ("local deployment") 将更新的责任转移给维护者,因此在出现关键/安全修复的情况下,必须及时重新发布包 - 而不是 "central deployment"它可能会通过 Windows 更新交付,可能带来的好处都不好。

【讨论】:

【解决方案2】:

如果您在使用先决条件安装程序时遇到问题,您还可以选择将可再发行组件安装为合并模块。正如同一篇 MSDN 文章提到的:

另一种选择是使用可再发行的合并模块(.msm 文件),它可以在 Program Files [(x86)]\Common Files\Merge Modules 中找到。

使用合并模块比手动添加文件更简洁。这些文件可能会被另一位不知道它们为什么在那里的同事意外删除,或者其中一个可能没有安装,等等......

高级安装程序的所有版本都支持包含合并模块,包括免费版。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2011-09-12
    • 2012-11-05
    • 2012-05-24
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多