用于部署在Windows 7上使用Visual Studio 2015开发的C ++ exe的可再发行组件

时间:2016-01-04 13:34:29

标签: visual-studio wix

我使用Visual Studio 2015开发了一个32位C ++应用程序(在Windows 10上)。我想将它部署到运行Windows 7及更高版本的计算机上。

我整理了一个WiX安装程序,并包含了here所述的VC ++可再发行合并模块。我包含的合并模块是C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_x86.msm

此安装程序似乎工作正常但在Windows 7上安装的程序将无法运行,抱怨缺少api-ms-win-crt-runtime-l1-1-0.dll

从搜索开始,我怀疑here的可再发行软件包vc_redist.x86.exe中可能有额外的文件,但WiX文档告诉我使用msm而不是exe。

合并模块也可能无法安装。我没有看到任何错误,但我还没有重新运行它,并启用了日志来检查这种可能性。

另一种选择可能是使用burn,但我不熟悉这个工具;如果它是正确的,我会走那条路,但如果可能的话,我更愿意坚持使用MSI。

3 个答案:

答案 0 :(得分:10)

VC ++运行时可再发行组件在Visual Studio 2015中变得更加复杂。有关通用CRT,请参阅the VC team blog post。基本上,合并模块不足:

  

Universal CRT不会有合并模块。如果您当前使用CRT合并模块并仍希望集中部署Visual C ++库,我们建议您转到上面提到的Windows Update程序包或VCRedist。或者,您可以选择静态链接到通用CRT和Visual C ++库。

答案 1 :(得分:2)

我们遇到了MSI软件包无法使用MSI Error 1618: 'Another installation is already in progress' during installation/uninstallation.安装可再发行组件的麻烦。我们使用Bootstraper安装了2015可再发行组件。例如:

<Chain>
  <!-- Microsoft Visual C++ 2015 x86 libraries -->
  <ExePackage Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
     SourceFile="EXAMPLE_PATH\vc_redist.x86.exe" InstallCommand="/install /passive /norestart">
  </ExePackage>

  <MsiPackage Id="MainPackage" SourceFile="YOUR_MSI_PACKAGE.msi" DisplayInternalUI="no" Compressed="yes" Vital="yes"/>
</Chain>

答案 2 :(得分:1)

值得注意的是,现在可以使用您的应用程序分发Universal C Runtime DLL。 MSDN blog post描述了以下步骤:

  1. Install the Windnows 10 SDK
  2. 转到C:\Program Files (x86)\Windows Kits\10\Redist\ucrt,找到您要定位的平台的DLL
  3. 将它们复制到您的应用程序的程序目录
  4. 它们并不大。大约2兆字节。

    我最终使用这种技术是因为:

    • 它不需要我创建一个单独的WiX包,然后再引导它们;
    • 不需要用户运行任何额外的安装程序

    我不能说它是否适用于所有计算机,但它适用于我测试过的计算机。