我正在为我们的软件创建一个需要msxml 6的WiX安装程序。如果我理解正确,从XP SP3开始,Windows附带了msxml 6,但由于我们的软件支持所有版本的XP,我猜客户可能会赢得& #39;安装了msxml 6;因此,如果尚未安装,我希望我们的安装程序安装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>
在我的Bundle(x86):
<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提供解决方案?我无法找到微软网站SP3或SP2的下载链接。
我感谢任何帮助。
答案 0 :(得分:1)
我不相信您链接的页面经过深思熟虑。你需要做的(一般)是观察任何给定的先决条件的足迹,并做出如何检测它的最佳选择。对于MSXML6,我使用ORCA编辑了MSI,并在注册表中找到以下内容:
SOFTWARE \ Microsoft \ MSXML 6.0 Parser和SDK \ CurrentVersion PatchLevel = 6.00.3883.8
我会找到该MSI的不同sp级别,看看你是否找到了一个趋势,然后在你的逻辑中使用它。
否则,将XP SP3的业务/工程要求放在您的应用程序上是非常合理的方法。如果客户要运行传统操作系统,他们至少应该使用最新的SP。微软已经切断了Windows的XP,你已经非常坚实地不再支持这个操作系统了。结果是更简单,更可靠的安装程序,开发和测试成本更低。