Необходимое условие WiX msxml 6

Я создаю установщик 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 &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>

И в моем комплекте (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.

Я ценю любую помощь.


person dbostream    schedule 11.02.2015    source источник
comment
Пора отказаться от XP и перейти на Windows 7, 8 или 10.   -  person Raptor    schedule 11.02.2015
comment
К сожалению, это не мое решение.   -  person dbostream    schedule 11.02.2015


Ответы (1)


Я не верю, что страница, на которую вы ссылаетесь, очень хорошо продумана. Что вам нужно сделать (в общем случае), так это наблюдать за следом любого заданного требования и сделать лучший выбор в отношении того, как его обнаружить. Для MSXML6 я отредактировал MSI с помощью ORCA и обнаружил в таблице реестра следующее:

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\MSXML 6.0 Parser и SDK\CurrentVersion PatchLevel = 6.00.3883.8

Я бы нашел разные уровни sp этого MSI и посмотрел, найдете ли вы тенденцию, а затем использовал бы ее в своей логике.

В противном случае это очень разумный и разумный подход, заключающийся в том, чтобы установить бизнес-/инженерное требование XP SP3 для вашего приложения. Если клиент собирается использовать устаревшую ОС, он должен иметь по крайней мере последнюю версию SP. Microsoft отключила XP от Центра обновления Windows, и вы находитесь на очень твердом основании, чтобы больше не поддерживать эту ОС. Результатом станет более простой и надежный установщик с меньшими затратами на разработку и тестирование.

person Christopher Painter    schedule 11.02.2015
comment
Спасибо за ваш вклад, я буду настаивать на том, чтобы сосредоточиться только на XP SP3 и новее, поскольку, скорее всего, не стоит тратить дополнительное время и усилия на охват всех версий XP, тем более что я считаю, что большинство клиентов перешли по крайней мере на Windows 7. - person dbostream; 11.02.2015
comment
Принятые ответы приветствуются. - person Christopher Painter; 11.02.2015