Состояние WIX только при установке не работает

У меня есть следующее в теге продукта:

<Property Id="LICENSEKEY" Admin="yes" Hidden="no">
  <RegistrySearch Id="RememberLicenseKey" Root="HKLM" Key="SOFTWARE\MyApp\key1\Settings" Name="LICENSEKEY" Type="raw"></RegistrySearch>
</Property>

<Condition Message="License key is required to proceed">LICENSEKEY AND NOT Installed</Condition>

Что я хочу сделать, так это передать лицензионный ключ в качестве аргумента командной строки для msiexec, а затем установить его в реестре. Если ключ не передан, я хочу отменить установку. Поэтому эту проверку нужно запускать только во время установки. Однако условие, которое я добавил, вызывает всплывающее окно как во время установки, так и во время удаления. Кажется, я не могу понять, что я делаю неправильно.

РЕДАКТИРОВАТЬ: я тестировал со следующим условием, и, похоже, отображается сообщение как при установке, так и при удалении:

<Condition Message="License key is required to proceed">NOT Installed</Condition>

person Wahaj Ali    schedule 17.09.2015    source источник
comment
Используйте эту таблицу, чтобы указать необходимые условия: stackoverflow.com/a/731700/600559   -  person Morten Frederiksen    schedule 19.09.2015


Ответы (2)



Возможно, вам потребуется уточнить ваше требование. Этот источник WiX выполняет поиск ключа, поэтому его нужно передать в командной строке, или вы отмените установку (как говорится в вашем сообщении), или его можно использовать, если он найден в реестре этим поиском в реестре? В настоящее время кажется, что ваш поиск в реестре перезаписывает все, что вы передаете в командной строке, в том числе устанавливает для него значение null, поэтому проверьте это с подробным журналом.

Кроме того, все примеры условий запуска, которые я видел или использовал, имеют CDATA вокруг текста фактического условия - это может быть частью проблемы.

Я предполагаю, что вы разрешаете ключ в командной строке или в реестре. Таким образом, ваш поиск в реестре должен быть для другого имени свойства, назовем его REGKEY, чтобы он не устанавливал для переданного LICENSEKEY значение null. Затем у вас есть настроенное свойство (тип 51) пользовательское действие сразу после поиска, которое устанавливает LICENSEKEY в REGKEY с условием -Not LICENSEKEY-, поэтому оно установит LICENSEKEY в REGKEY только в том случае, если LICENSEKEY не был передан в командной строке. Поэтому, если вы передадите его в командной строке, он будет использоваться, в противном случае будет использоваться реестр. В этот момент условие LICENSEKEY должно работать как условие запуска. Внутри AppSearch, который находит элемент реестра, обычно сразу же следует за проверкой условий запуска в MSI WiX, поэтому вам необходимо установить LICENSEKEY перед проверкой условий запуска.

person PhilDW    schedule 17.09.2015