我使用Visual 2015 (在Windows 10上)开发了一个32位的C++应用程序.我想将它部署到运行Windows 7及更高版本的计算机上。
我组装了一个WiX安装程序,并包括了VC++可再发行的合并模块,如描述的这里。我包含的合并模块是C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_x86.msm。
此安装程序似乎工作正常,但在Windows7上安装的程序将无法运行,抱怨缺少api-ms-win-crt-runtime-l1-1-0.dll。
在搜索过程中,我怀疑来自这里的可再发行包这里中可能有额外的文件,但是WiX文档告诉我使用msm而不是exe。
合并模块也有可能安装失败。我没有看到任何错误,但是我还没有重新运行它,启用了日志来检查这种可能性。
另一种选择可能是使用burn,但我不熟悉这个工具;如果正确的话,我会选择这条路线,但如果可能的话,我更愿意坚持使用MSI。
发布于 2016-01-04 18:57:13
在Visual 2015中,VC++运行时重新发行表变得更加复杂。关于通用CRT,请参见VC团队博客文章。基本上,合并模块是不够的:
通用CRT不会有合并模块。如果您目前使用CRT合并模块,并且仍然希望集中部署VisualC++库,我们建议您移到上面提到的Windows包或VCRedist。或者,您可以选择静态链接到Universal和Visual库。
发布于 2016-11-08 14:37:29
我们遇到了这样的麻烦: MSI软件包未能用MSI Error 1618: 'Another installation is already in progress' during installation/uninstallation.安装可再发行版,我们使用Bootstraper安装了2015年的WIX可再发行版。例如:
<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>
发布于 2017-07-07 21:52:31
值得注意的是,现在可以在应用程序中分发。MSDN博客文章描述了以下步骤:
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt,并为您所针对的平台找到DLL它们不是很大。总计约2兆字节。
我最后使用了这种技术,因为:
我不能说它是否能在所有的计算机上工作,但是它能在我测试过的计算机上工作。
https://stackoverflow.com/questions/34592378
复制相似问题