WiX Bundle bal: состояние - утилита:RegistrySearch - не работает

Похожий пост здесь, но я не могу заставить мой рабочий WiX Bundle bal:condition - util:RegistrySearch переменная всегда false

Сэр, я изо всех сил пытаюсь заставить эту точную вещь работать. "Версия" устанавливается в 0, если ключ реестра отсутствует, и в 1, если ключ присутствует. В любом случае мой комплект все еще устанавливается.

Я использую VS 2015 и Wix 3.10. Пожалуйста, вы можете помочь.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
 xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">  
 <Bundle Name="XXX"
      Version="XXX"
      Manufacturer="XXX"
      UpgradeCode="XXX"
      IconSourceFile="XXX"
      Copyright="XXX" >

<util:RegistrySearchRef Id='SearchForMyIns' />

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
  ...
</BootstrapperApplicationRef>

<Chain>
  <PackageGroupRef Id='NetFx40Web' />

  <MsiPackage SourceFile="$(var.DummyInstaller.TargetDir)\DummyInstaller.msi"  DisplayName="Dummy Conditioning" />      
</Chain>
</Bundle>

<Fragment>
<util:RegistrySearch
      Id='SearchForMyInst'
      Variable="Version"
      Result="exists"
      Root="HKLM"
      Key="SOFTWARE\MyInst" 
      Win64="yes" />
<bal:Condition Message="ThirdParty Application Required.">Version</bal:Condition>
</Fragment>

</Wix>

2 ответа

Бал: Состояние не оценивается, если вы используете MBA. Проверьте следующую ссылку

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Wix-Burn-Bundle-condition-does-not-work-if-using-MBA-td7581757.html

+ Изменить

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">

в

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">

Вы увидите Bal: Состояние работает

Причина, по которой это всегда устанавливается для вас, заключается в том, что

<bal:Condition Message="messagehere">Version</bal:Condition>

оценит наличие версии, а не значение версии. Поскольку ваш поиск в реестре включен, версия всегда определяется, и, следовательно, условие всегда выполняется. (Я считаю, что это потому, что все переменные поиска в реестре неявно являются строковыми переменными)

Если вы добавите "Version = 1", то ваша установка должна продолжиться только тогда, когда поиск в реестре найдет то, что вы ищете.

Я также хотел бы указать на особенно неприятную ловушку этого типа состояния. Что произойдет, если пользователь установит ваш пакет, а затем решит, что им больше не нужен ваш пакет или сторонняя программа, и он удалит их оба, но сначала он удалит стороннюю программу?

Ваш установщик не сможет удалить программу, так как при попытке его запуска произойдет сбой bal:Condition каждый раз, когда сторонняя программа больше не присутствует в системе.

Чтобы решить эту проблему, вы должны добавить "OR WixBundleInstalled" в свой баланс:Condition.

Другие вопросы по тегам