我可以将Visual Studio 2015 C ++ Redistributable DLL与我的应用程序捆绑在一起吗?

时间:2016-01-30 02:10:00

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

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

但是,可再发行的安装程序并不完美。我的一些用户报告说可再发行安装程序挂起,或者说它无法安装,然后用户得到了#34;此程序无法启动,因为您的计算机缺少MSVCP140.dll&# 34;错误。

据微软称,Visual C++ Redistributable for Visual Studio 2015

  

要部署可再发行的Visual C ++文件,可以使用Visual Studio中包含的Visual C ++ Redistributable Packages(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

可以这样做吗?我需要出示许可证吗?为什么没有更多人这样做而不需要再次预安装可再发行组件?

2 个答案:

答案 0 :(得分:15)

  

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

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

  

可以这样做吗?我需要出示许可证吗?为什么没有更多人这样做而不需要再次预安装可再发行组件?

从技术上讲,这样做是可以的。如果您想对此嗤之以鼻,可以在readmehelp/about中添加一条注释,使其符合Microsoft Deployment in Visual C++明确允许的VC++ 2015 redistributables provided in "local deployment" mode

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

  • 对于像MyApp.exe这样的单个模块应用程序,使用静态链接的所有内容来构建它更容易,以便首先消除外部依赖关系;
  • 包括那些文件可以节省1 + MB的分发(大概是下载)大小;
  • 使用运行时的私有副本("local deployment")运行,将更新的责任转移给维护者,以便在进行关键/安全修复的情况下,必须及时重新发布包 - 而不是{{ 1}}它可能会通过Windows Update传递,可能会带来好的错误。

答案 1 :(得分:2)

如果先决条件安装程序有问题,您还可以选择将可再发行组件安装为合并模块。正如同一篇MSDN文章所述:

  

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

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

所有版本的Advanced Installer都支持包含合并模块,包括免费版。