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. Проверьте следующую ссылку
+ Изменить
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
в
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
Вы увидите Bal: Состояние работает
Причина, по которой это всегда устанавливается для вас, заключается в том, что
<bal:Condition Message="messagehere">Version</bal:Condition>
оценит наличие версии, а не значение версии. Поскольку ваш поиск в реестре включен, версия всегда определяется, и, следовательно, условие всегда выполняется. (Я считаю, что это потому, что все переменные поиска в реестре неявно являются строковыми переменными)
Если вы добавите "Version = 1", то ваша установка должна продолжиться только тогда, когда поиск в реестре найдет то, что вы ищете.
Я также хотел бы указать на особенно неприятную ловушку этого типа состояния. Что произойдет, если пользователь установит ваш пакет, а затем решит, что им больше не нужен ваш пакет или сторонняя программа, и он удалит их оба, но сначала он удалит стороннюю программу?
Ваш установщик не сможет удалить программу, так как при попытке его запуска произойдет сбой bal:Condition каждый раз, когда сторонняя программа больше не присутствует в системе.
Чтобы решить эту проблему, вы должны добавить "OR WixBundleInstalled" в свой баланс:Condition.