我正在为我们的软件创建一个WiX安装程序,它需要msxml 6.如果我理解正确msxml 6随Windows从XP SP3开始出货,但由于我们的软件支持XP的所有版本,我猜这是有风险的客户不会安装msxml 6;因此我希望我们的安装程序安装msxml 6,前提是它尚未安装。WiX msxml 6先决条件
我发现这个page显示如何检测msxml 6是否安装在计算机上,但它没有说明安装了哪个版本(SP1,SP2等)。
我的问题是如何正确检测msxml 6是否安装并安装最新版本(如果未检测到)?
这是我现在使用进行检测(什么,我在上面的链接和我使用的其他先决条件是什么发现的组合)什么:
<!-- MSXML6 SP1 (x86) -->
<util:RegistrySearch Root="HKCR" Key="Msxml2.DOMDocument.6.0" Format="raw"
Variable="MsXml6x86Installed" />
<PackageGroup Id="MsXml6x86">
<MsiPackage Id="MsXml6x86" Cache="no" Compressed="yes" Permanent="yes" Vital="yes"
SourceFile="$(var.PrerequisitesPackagesRootPath)\msxml6_SP1_x86\msxml6_x86.msi"
InstallCondition="(VersionNT < v6.0) AND (NOT MsXml6x86Installed)" />
</PackageGroup>
<!-- MSXML6 SP1 (x64) -->
<util:RegistrySearch Root="HKCR" Key="Msxml2.DOMDocument.6.0" Format="raw"
Variable="MsXml6x64Installed" Win64="yes" />
<PackageGroup Id="MsXml6x64">
<MsiPackage Id="MsXml6x64" Cache="no" Compressed="yes" Permanent="yes" Vital="yes"
SourceFile="$(var.PrerequisitesPackagesRootPath)\msxml6_SP1_x64\msxml6_x64.msi"
InstallCondition="(VersionNT64 < v6.0) AND (NOT MsXml6x64Installed)" />
</PackageGroup>
在我的包(86):
<Bundle>
...
<Chain>
<PackageGroupRef Id="MsXml6x86"/>
<PackageGroupRef Id="Vc2010Sp1x86" />
<PackageGroupRef Id="Netfx35Sp1" />
<PackageGroupRef Id="Netfx4Full" />
...
</Chain>
</Bundle>
当我开始我的安装程序,我得到的日志文件的输出如下:
[21E4:3F00][2015-02-11T09:57:31]i000: Setting string variable 'MsXml6x86Installed' to value 'XML DOM Document 6.0'
[21E4:3F00][2015-02-11T09:57:31]i101: Detected package: MsXml6x86, state: Absent, cached: None
因此,我找到的注册表键被发现,这表明msxml 6存在,但实际的软件包没有。我猜是因为当我搜索msxml6.dll时,我的Win 7计算机似乎安装了SP3,而我在安装程序中使用的msxml软件包是用于SP1的?但这是我不知道该怎么做的地方;在我们的Win 7测试计算机上默认安装了msxml 6 SP3,我们的Win XP SP3测试计算机默认安装了msxml 6 SP2。我应该在安装程序中使用哪个msxml软件包以获得从XP开始的所有Windows版本的解决方案?我无法找到Microsoft网站的SP3或SP2的下载链接。
我很感激任何帮助。
时间放弃XP和移动到Windows 7,8或10. – Raptor 2015-02-11 10:34:17
不幸的是,这不是我的决定。 – dbostream 2015-02-11 11:52:35