首页 文章

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

提问于
浏览
24

我've built a C++ application using Microsoft Visual Studio 2015 Community Edition. I'使用高级安装程序确保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

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

2 回答

  • 12

    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++ .

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

    • 对于像 MyApp.exe 这样的单个模块应用程序,使用静态链接的所有内容来构建它更容易,以便首先消除外部依赖关系;

    • 不包括那些文件从分发(可能是下载)大小节省1 MB;

    • 运行时运行时的私有副本( "local deployment" )将更新的责任转移给维护者,以便在进行关键/安全修复的情况下,必须及时重新发布包 - 而不是 "central deployment" 它可能通过Windows Update,可能带来好的和坏的 .

  • 2

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

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

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

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

相关问题