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=&quot;Rogis&quot;". Я также рекомендую нечувствительный к регистру оператор ~=. Наконец, вам может потребоваться пометить компоненты как переходные, если вы ожидаете, что восстановление изменит, какие компоненты установлены, если запись реестра изменилась.

Наконец, более простое решение — всегда устанавливать оба файла, а затем во время выполнения вашего приложения читать реестр и решать, какой из них вызывать.

Другие вопросы по тегам