Wix组件条件不能按预期工作

时间:2016-04-19 01:26:28

标签: wix components conditional-statements

我已经看到其他帖子描述了基于功能状态未被唤醒的组件条件,但我的问题要简单得多。

鉴于以下内容:

<Property Id="WORDISINSTALLED" Secure="yes">
    <RegistrySearch Id="FindWordIsInstalled" Root="HKCR" Key="Word.Application" Type="raw"  Win64="$(var.Win64)"/>
</Property>

<Property Id="WORDVERSION" Secure="yes">
    <RegistrySearch Id="WordVersion" Root="HKCR" Key="Word.Application\CurVer" Type="raw"/>
</Property>

<SetProperty Id="MIN_WORD_VERSION_INSTALLED" After ="AppSearch" Value="1">
    <![CDATA[WORDVERSION <> "Word.Application.11" AND WORDVERSION <> "Word.Application.12" AND WORDISINSTALLED]]>
</SetProperty>

我应该可以这样做:

<Component Id="$(var.SOFFWordAddinReg_Id)" DiskId="1" Guid="$(var.SOFFWordAddinReg_Guid)" Win64="$(var.Win64)">
    <Condition>MIN_WORD_VERSION_INSTALLED</Condition>
      <RegistryValue Root="HKLM" Key="Software\Microsoft\Office\Word\AddIns" Name="Description" Value="yada" Type="string" Action="write"/>
    </Component>

期望只有在MIN_WORD_VERSION_INSTALLED为非null且为TRUE时才会安装组件var.SOFFWordAddinReg_Id。

我从日志中看到WORDISINSTALLED设置为&#34; Microsoft Word Application&#34;和WORDVERSION设置为&#34; Word.Application.14&#34; (在AppSearch中),但未设置MIN_WORD_VERSION_INSTALLED:

跳过操作:SetMIN_WORD_VERSION_INSTALLED.FA651678_2CA2_423F_9FE0_FE10237B33F6(条件为假)

日志还显示组件 组件:SOFFWordAddinReg.7D199B30_06E3_488C_9EDF_4B8188026E9C;安装:缺席;要求:本地;行动:空虚;客户状态:未知

但不要说为什么。 (我假设因为条件?)

我必须做一些非常基本错误的事情。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

布尔表达式应该使用parens,因为布尔运算符的优先级是&lt; =比较运算符,例如。应该是:

&#34; Word.Application.11&#34;)AND(WORDVERSION&lt;&gt;&#34; Word.Application.12&#34;)AND(WORDISINSTALLED)]]&gt;