WIX v4 Не удается создать условие компонента на основе свойства RegistrySearch.
«Привет, у меня есть три компонента (файла). Один должен быть установлен в любом случае, а для двух других должен быть установлен только один на основе значения ключа реестра. К сожалению, я не добился с этим никакого прогресса (десятки попыток из-за реальной дукументации для версии v4, несмотря на огромную разницу между версиями..).
Это мой код (все справочники и длинные идентификаторы заменены на... для облегчения чтения):
< Fragment >
< Property Id = "CTRLTYPE" Secure = "yes" >
< RegistrySearch Id = "CTRLRInstalledSearch"
Root = "HKLM"
Key = "SOFTWARE\Promise\Agadir\Params"
Name = "CtrlType" < !--the registry string value to check-->
Type="raw" />
</Property>
<Directory Id="INSTALLFOLDER" Name="OperationRaf" >
<Directory Id="dir_..." Name="Raf">
<Component Id="comp_....." Guid="....">
<File Id="file_..." Checksum="yes"
KeyPath="yes" Source="..\\Release\Gentor.exe" />
</Component>
<Component Id="comp_..." Guid="...">
<File Id="file_..." Checksum="yes"
KeyPath="yes" Source="..\\Release\Punker.exe" />
</Component>
<!-- if the registry string value is "Rogis" install component-->
<Component Id="comp_..." Guid="...." Condition="CTRLTYPE=Rogis">
<File Id="file_..." Source="..\\Release\Rogis.exe" />
</Component>
<!-- if the registry string value is "Archa" install component-->
<Component Id="comp_..." Guid="..." Condition="CTRLTYPE=Archa">
<File Id="file_..." Source="..\\Release\Archa.exe" />
</Component>
</Directory>
</Directory>
</Fragment>
Но мои попытки использовать тот же метод, что и v3, для условия ![CDATA[CONTROLLER_TYPE = "rogis"]] не увенчались успехом. Это мой код, можете ли вы сообщить мне, является ли это известной ошибкой или что мне нужно сделать, чтобы установить этот условный компонент? При копировании одного и того же условия или любой его комбинации это не сработало. Пожалуйста помоги...
1 ответ
Вам нужно заключить строковый литерал в кавычки, напримерCondition="CTRLTYPE="Rogis""
. Я также рекомендую нечувствительный к регистру оператор ~=. Наконец, вам может потребоваться пометить компоненты как переходные, если вы ожидаете, что восстановление изменит, какие компоненты установлены, если запись реестра изменилась.
Наконец, более простое решение — всегда устанавливать оба файла, а затем во время выполнения вашего приложения читать реестр и решать, какой из них вызывать.