В моем проекте Bundle я ищу в реестре версию и задаю переменную:
<Variable Name="Installed_Ver" bal:Overridable="yes" Type="version" Value="0.0.0.0" Persisted="yes" />
<util:RegistrySearch
Id="Self_Ver"
Root="HKLM"
Key="Software\MyCompany\MyProductName"
Value="Version"
Variable="Installed_Ver"
Format="raw"
Win64="yes"
/>
И используя это в условии как:
<util:RegistrySearchRef Id="Self_Ver" />
<bal:Condition Message="A recent or same version of this product is already installed on this machine. Please contact product support for more information." >
<![CDATA[WixBundleInstalled OR (WixBundleFileVersion > Installed_Ver)]]>
</bal:Condition>
Это нормально работает, если существует HKLM \ Software \ MyCompany \ MyProductName \ Version. Но если этот реестр не существует, то поиск в реестре не удастся, и он отменяет установку переменной 'Installed_Ver'. Это приводит к тому, что условие ошибочно оценивается как ложное.
Определив, я попытался установить значение по умолчанию, то есть "0.0.0.0", чтобы оно имело какое-то значение, и условие было бы правильно оценено, т.е. в данном случае в True.
Вот журнал, который показывает, что он отменяет сброс переменной 'Installed_Ver'.
[5898: 2AC4] [2018-08-30T13: 15: 08] i000: установка строковой переменной 'WixBundleName' в значение 'RegVersionCheck'
[5898: 2AC4] [2018-08-30T13: 15: 08] i000: установка строковой переменной 'WixBundleManufacturer' в значение 'Тестирование'
[5898: 3354] [2018-08-30T13: 15: 08] i000: установка числовой переменной 'WixStdBALanguageId' в значение 1033
[5898: 3354] [2018-08-30T13: 15: 08] i000: установка переменной версии 'WixBundleFileVersion' в значение '7.1.2.3'
[5898: 2AC4] [2018-08-30T13: 15: 08] i100: Обнаружение начала, 1 упаковка
[5898: 2AC4] [2018-08-30T13: 15: 08] i000: ключ реестра не найден. Key = 'Software \ MyCompany \ MyProductName'
[5898: 2AC4] [2018-08-30T13: 15: 08] i000: Сброс переменной 'Installed_Ver'
[5898: 2AC4] [2018-08-30T13: 15: 08] i101: Обнаружен пакет: MainProduct, состояние: отсутствует, кэшируется: нет
[5898: 2AC4] [2018-08-30T13: 15: 08] i104: обнаружен пакет: MainProduct, функция: CalculatorFeature, состояние: отсутствует
[5898: 2AC4] [2018-08-30T13: 15: 08] i052: условие «WixBundleInstalled ИЛИ (WixBundleFileVersion> Installed_Ver)» оценивается как ложное.
[5898: 2AC4] [2018-08-30T13: 15: 08] e000: на этом компьютере уже установлена последняя или та же версия этого продукта. Пожалуйста, свяжитесь со службой поддержки для получения дополнительной информации.
[5898: 2AC4] [2018-08-30T13: 15: 08] e000: Ошибка 0x81f40001: условие пакета оценено как ложное: WixBundleInstalled ИЛИ (WixBundleFileVersion> Installed_Ver)
[5898: 2AC4] [2018-08-30T13: 15: 08] i199: обнаружение завершено, результат: 0x0
Я попытался жестко закодировать "0.0.0.0" в состоянии вместо Installed_Ver, и он работает нормально.
Как получить значение по умолчанию для Installed_Ver, если поиск в реестре завершился неудачей?
Спасибо