2015-02-11 101 views
0

我正在为我们的软件创建一个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 &lt; 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 &lt; 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的下载链接。

我很感激任何帮助。

+0

时间放弃XP和移动到Windows 7,8或10. – Raptor 2015-02-11 10:34:17

+0

不幸的是,这不是我的决定。 – dbostream 2015-02-11 11:52:35

回答

1

我不相信你链接的页面是非常深思熟虑的。你需要做的(一般)是观察任何给定的prereq的占用空间,并在如何检测它的最佳选择。对于MSXML6我编辑的MSI使用ORCA,发现在注册表中的以下内容:

SOFTWARE \微软\ MSXML 6.0分析器和SDK \ CURRENTVERSION PATCHLEVEL = 6.00.3883.8

我会去寻找不同的SP水平MSI,看看你是否发现了一个趋势,然后在你的逻辑中使用它。

否则,将XP SP3的业务/工程要求放在您的应用程序上是非常合理且合理的方法。如果客户要运行传统操作系统,他们应该至少达到最新的SP。微软已经切断了Windows Update的XP,并且你已经非常坚实地不再支持这个操作系统。结果将是一个更简单,更可靠的安装程序,开发和测试成本更低。

+0

感谢您的意见,我会推荐专注于XP SP3和更新版本,因为我相信大多数客户至少已经转移到Windows 7,因此它很可能不值得花费额外的时间和精力来覆盖所有版本的XP。 – dbostream 2015-02-11 15:08:13

+0

接受的答案赞赏。 – 2015-02-11 15:22:42