Установите свойство в WiX на основе условия

Это должно быть легким, но через несколько часов я ничего не понимаю. ;(

Я выполняю поиск в реестре (на самом деле два), потому что мне нужно проверить любое из двух предыдущих установок, а затем установить мои новые файлы в расположение предыдущей установки, которая была найдена.

  • Фактически будет существовать только одна из этих предыдущих установок.

Затем мне нужно установить мои новые файлы в «InstallLocation», из которых был найден «PROD#».

<!—  Look for the UnInstall key of the 1st possible product  -->
<!—  GUID = {E928E024-DEFE-41A7-8469-D338212C4943}           -->
<Property Id='PROD1'>
    <RegistrySearch Id='PROD_REG1'
                    Type='raw'
                    Root='HKLM'
                    Key='$(var.REGKEY_PROD1)'
                    Name='InstallLocation' />
</Property>

<!—  Look for the UnInstall key of the 2nd possible product  -->
<!—  GUID = {A40A9018-DB9D-4588-A591-F012600C6300}           -->
<Property Id='PROD2'>
  <RegistrySearch Id='PROD_REG2'
                  Type='raw'
                  Root='HKLM'
                  Key='$(var.REGKEY_PROD2)'
                  Name='InstallLocation' />
    </Property>

<!--  How do I set INSTALL_HERE Property to whichever ‘InstallLocation’ was found?  -->

<!--  Define the directory structure  -->
<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="INSTALL_HERE">
        <Directory Id="MAIN_DIRECTORY" Name="MyProduct"/>
        <Directory Id="HELP_DIRECTORY" Name="Help"/>
    </Directory>
</Directory>

person Zerren    schedule 06.11.2009    source источник
comment
Итак, вы пытаетесь создать 1 установщик для 2 разных продуктов, который будет устанавливаться поверх любого найденного?   -  person Agent_9191    schedule 06.11.2009


Ответы (1)


Следующее установит свойства A и B в результат двух разных поисков в реестре. Если поиск B был успешным, он заменяет значение A значением B.

  <Property Id="A">
     <!-- registry search 1 here -->
  </Property>

  <Property Id="B">
     <!-- registry search 2 here -->
  </Property>

  <SetProperty Id="A" After="AppSearch" Value="[B]">
     B
  </SetProperty>

Обратите внимание, как элемент SetProperty использует значение B дважды: один раз как Value="[B]" для переопределить значение A и один раз в качестве текста условия пользовательского действия. After="AppSearch" гарантирует, что пользовательское действие будет выполнено сразу после поиска в реестре.

См. также этот ответ Роба Меншинга

person Wim Coenen    schedule 07.11.2009
comment
Большое спасибо! 1› Agent_9191: Да, это в основном то, что мне нужно сделать. Мое приложение является дополнением к продукту, и единственный способ узнать, где установлен «основной» продукт (и установлен ли он), — это просмотреть информацию об удалении «основного» продукта в реестре. Моя проблема связана с тем, что всякий раз, когда обновляется «основной» продукт, предыдущая информация об удалении исчезает и заменяется информацией о последнем обновлении. И если они обновят его снова, мне понадобится третий поиск в реестре! 2› wcoenen: Как я уже сказал: это должно быть легко, но я просто НЕ понял. *** Спасибо за вашу помощь! *** - person Zerren; 09.11.2009