适用于应用程序本地部署的Visual C++ 2015可再发行DLL文件

19

在Visual Studio 2013及其之前版本中,你只需要msvcr[version].dll和msvcp[version].dll就可以了。 但现在在2015中这些DLLs已经改变了。 为了避免使用redist installer,我需要包含什么内容?

编辑:

现在似乎不可能了: http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx

"不支持通用CRT的App本地部署。"

更新:

上面链接的内容已于2015年9月11日更新。现在可以进行app本地部署了。


2
看起来他们在几乎所有人都抱怨之后改变了主意(查找STL的评论-它被突出显示)。然而,到目前为止我还没有找到任何官方文件。MSDN文章尚未更新。redist目录不包括ucrtbase.dll,而是在system32中(正如他们最初所说)。 - bogdan
3
好的,请看这里:http://blogs.msdn.com/b/vcblog/archive/2015/07/20/visual-studio-2015-rtm-now-available.aspx。找到James McNellis发表的第一条评论。我能够将为x86编译的简单应用程序部署到未安装2015可再发行组件的Win8.1 32位系统上。如果您仍需要,我可以写一个完整的答案。 - bogdan
4个回答

16

这对我(x86应用程序)有效。

将这些位置中的所有dll与您的应用一起发布:

  • C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86
  • C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT

3
我自己需要一个额外的文件才能实现这个功能。以下是目录,其中一个以更通用的格式呈现:
  1. 从“C:\ Program Files \ Windows Kits \ 10 \ Redist \ ucrt \ DLLs \ x86”或“C:\ Program Files(x86)\ Windows Kits \ 10 \ Redist \ ucrt \ DLLs \ x86”复制所有文件(如果是64位应用程序,请从x64目录中复制)。
  2. 从以下位置复制msvcp140.dll和vcruntime140.dll: <Visual Studio 2015安装目录>\Microsoft Visual Studio 14.0 \ VC \ redist \ x86 \ Microsoft.VC140.CRT(如果是64位应用程序,请从x64目录中复制)。

如果您正在使用Qt,请将这些文件复制到windeployqt创建的目录中。

一般来说,我发现您只需执行步骤#1,然后尝试运行应用程序。 它将告诉您缺少的第一个文件,一旦您将其放入应用程序的目录中,它将告诉您下一个所需的文件。 在我的情况下,是两个文件。 从我的<Windows>\ System32文件夹中复制类似的文件,例如,并不成功。 我发现使用Dependency Walker并尝试满足它指示的依赖项是不成功的。

这允许您创建一个便携式应用程序,可在XP等旧版M $ OS上运行; 或为没有vcredist_x86或vcredist_x64的用户安装,他们没有管理员权限。

顺便说一句:第1步非常正式。 这是MSDN博客上的内容:Introducing the Universal CRT 他们说要复制所有文件以使应用程序在所有M $ OS上运行。


1
通常,您可以使用依赖项查找器查找依赖的DLL列表。 关于Visual Studio运行时DLL,您最关心的是其中包含特定版本Visual Studio的DLL。

Dependency Walker 由于某些原因没有显示 ucrtbase.dll 作为依赖项。无论是否在依赖项中看到它,您都应该始终将其包含在您的应用程序本地分发中。 - izogfif

0

正如this文章中第6点所提到的,现在可以进行通用CRT的本地部署。要做到这一点,您应该安装Windows 10 SDK并从C:\Program Files (x86)\Windows Kits\10\Redist\ucrt复制所有二进制文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接