使用Visual Studio 2012编译器是否能够针对Windows Installer 3.0进行目标定位?

6
最近,微软撤回了在Visual Studio 2012 Update 1中停止对Windows XP支持的决定。我们的产品经理告诉我,只要满足以下两个条件,就可以使用Visual Studio 2012编译器:
1. 继续支持Windows XP用户。 2. 不引入除Windows XP SP3之外的任何附加先决条件(因为我们与某些客户签订了协议)。
我尝试将解决方案转换为使用VC2012 XP工具集,并且从代码角度来看一切都运行良好。然而,我们的WiX安装程序项目却抱怨我们现在在尝试包含VC2012 Runtime合并模块,并且这些模块仅支持Windows Installer 4.5。这个Windows Installer版本在Windows XP SP3中不可用,这意味着我们的客户需要安装Windows Installer 4.5可再发行包才能安装我们的产品。
有没有办法解决这个问题,在支持Windows Installer 3.0的情况下仍然使用那些合并模块?
因此,我们目前正在设置:
<Package InstallerVersion="300" />

但是合并模块似乎需要我们设置:

<Package InstallerVersion="405" />

这将意味着我们无法直接支持Windows XP SP3。以下是来自WiX的错误信息:警告LGHT1104:合并模块'Microsoft_VC110_ATL'具有安装程序版本405,高于产品的安装程序版本300。将比所要合并到的产品更高安装程序版本的模块合并可能会导致结果msi中出现无效值。您必须将Package/@InstallerVersion属性设置为405或更高才能将此合并模块合并到产品中。
2个回答

7
使用您的产品安装Windows Installer 4.5。它可用于 Windows XP SP2和SP3。毕竟,VC 2012运行时也没有随Windows XP一起提供。
您可能会卡在只能将产品安装为MSI与任何需要的合并模块。使用WiX的Bootstrapper项目(WiX 3.6及更高版本),您可以轻松创建一系列安装程序并将其捆绑到一个EXE文件中。引擎(称为Burn)也处理任何需要的重新启动。如果您已经安装了最新版本的WiX,则您已经看到了burn的效果。
如果您选择这种方法,您还可以从MSI中删除合并模块,并将VC 2012运行时添加到您的链中。

嗯,有趣的想法,我不知道这是可能的。 - Benj
强烈建议链接先决条件MSI。第三方合并模块在最好的情况下几乎总是有问题的。 - Christopher Painter
是的,请链式操作。企业应用程序打包人员需要从软件包中删除运行时和合并模块以强制执行自己的版本 - 通常情况下如此。通常,链式操作而不是嵌入可以节省时间和精力,因为这样更容易删除它们。 - Stein Åsmul

0

您需要在Package元素中设置InstallerVersion属性,以设置安装所需的Windows安装程序。

例如3.0 Windows Installer

<Package InstallerVersion="300" />

这是我们目前所做的。问题在于合并模块与300不兼容。我会更新问题,使其更加清晰。 - Benj

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