Я создаю установщик WiX для нашего программного обеспечения, для которого требуется msxml 6. Если я правильно понимаю, msxml 6 поставляется с Windows, начиная с XP SP3, но поскольку наше программное обеспечение поддерживает все версии XP, я предполагаю, что существует риск того, что у клиента не будет установлен msxml 6; поэтому я хотел бы, чтобы msxml 6 был установлен нашим установщиком, если он еще не установлен.
Я нашел эту страницу показывает, как определить, установлен ли 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>
И в моем комплекте (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 установлен пакет обновления 3 (SP3), а пакет msxml, который я использую в программе установки, предназначен для пакета обновления 1 (SP1)? Но здесь я не знаю, что делать; на нашем тестовом компьютере с Win 7 по умолчанию установлен msxml 6 SP3, а на нашем тестовом компьютере с Win XP SP3 по умолчанию установлен msxml 6 SP2. Какой пакет msxml следует использовать в программе установки, чтобы получить решение для всех версий Windows, начиная с XP? Я не могу найти ссылку для скачивания SP3 или SP2 на веб-сайте Microsoft.
Я ценю любую помощь.