C++ visualc&x2B+;2015可再发行DLL,用于应用程序本地部署

C++ visualc&x2B+;2015可再发行DLL,用于应用程序本地部署,c++,visual-studio-2015,C++,Visual Studio 2015,到Visual Studio 2013为止,您所需要的只是msvcr[version].dll和msvcp[version].dll。 现在他们在2015年改变了DLL。 为了避免redist安装程序,我需要包括什么 编辑: 现在似乎不可能了: “不支持通用CRT的应用程序本地部署。” 更新: 上述内容于2015年9月11日更新。现在可以在本地部署应用程序了。通常,您可以使用dependency walker查找依赖DLL的列表。 关于VisualStudio运行时DLL,您最关心的是其中包含

到Visual Studio 2013为止,您所需要的只是msvcr[version].dll和msvcp[version].dll。 现在他们在2015年改变了DLL。 为了避免redist安装程序,我需要包括什么

编辑:

现在似乎不可能了:

“不支持通用CRT的应用程序本地部署。”

更新:


上述内容于2015年9月11日更新。现在可以在本地部署应用程序了。

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

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

将所有DLL从以下位置与您的应用程序一起传送:

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

如本文第6)点所述,现在可以在本地部署通用CRT。要做到这一点,您应该安装并复制
C:\ProgramFiles(x86)\Windows Kits\10\Redist\ucrt
我自己的所有二进制文件,我需要一个额外的文件来实现这一点。以下是目录,其中一个采用更通用的格式:

  • 从“C:\Program files\Windows Kits\10\Redist\ucrt\DLLs\x86”或“C:\Program files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x86”复制所有文件(如果是64位应用程序,则从x64目录复制)
  • 从以下位置复制msvcp140.dll和vcruntime140.dll: \Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT(如果是64位应用程序,则从x64目录复制它们)
  • 如果您使用的是Qt,请将这些文件复制到windeployqt创建的目录中

    一般来说,我发现您可以只执行步骤1,然后尝试运行您的应用程序。它会告诉你它丢失的第一个文件,一旦你把它放到应用程序的目录中,它会告诉你你需要的下一个文件。就我而言,是两个。例如,从my\System32文件夹复制类似文件失败。我发现使用Dependency Walker并试图满足它指出的依赖关系是不成功的

    这让你可以制作一个便携式应用程序,它可以在像XP一样古老的M$OS上运行;或者为没有vcredist_x86或vcredist_x64且没有管理员权限的用户安装


    顺便说一句:第一步相当正式。这是MSDN博客上的内容:他们说要把它们全部复制下来,让一个应用程序在所有M$OS上运行。

    看起来就像是在几乎所有人都抱怨过这一点之后(看看STL的评论——它突出显示了)。然而,到目前为止,我还没有找到任何关于这方面的官方文件。MSDN文章尚未更新。
    redist
    目录不包括
    ucrtbase.dll
    ,它位于
    system32
    中(正如他们最初所说)。好的,您需要查看这里:。寻找詹姆斯·麦克内利斯的第一条评论。我能够将一个为x86编译的简单应用程序部署到一个从未安装过2015年可再发行版本的Win32 8.1 32位系统上。如果您仍然需要,我可以写一个完整的答案。由于某些原因,Dependency walker不会将ucrtbase.dll显示为依赖项。无论您是否在依赖项中看到它,都应始终将其包含在应用程序本地分发中。