我使用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。
答案 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描述了以下步骤:
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt
,找到您要定位的平台的DLL 它们并不大。大约2兆字节。
我最终使用这种技术是因为:
我不能说它是否适用于所有计算机,但它适用于我测试过的计算机。