在新属性中组合特征条件



我有一个Wix setupKit,我有一些基于它们的功能,一些自定义对话框将显示。在某些情况下,我想把它们合并成一个新的性质。例如:

<Property Id="SERVERSETTINGSISNEEDED">
<![CDATA[(&Client = 3) OR (!Client = 3) OR (&CoreService = 3) OR (!CoreService = 3) OR (&ResourceService = 3) OR (!ResourceService = 3)]]>
</Property>

然后:

<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ServersSettingsDlg" Order="1">SERVERSETTINGSISNEEDED</Publish>

但是它不工作,总是显示对话框。

当您在WiX中使用<Property>元素定义MSI属性时,它是在构建时构建的,并且在构建MSI包时,您最终在属性表中拥有一条记录。另一方面,特性状态是在运行时解析的,也就是说,在安装包的时候。

因此,您尝试在构建时引用运行时值,这是不正确的。我确信它可以解释为什么结果属性计算为true,但这不是问题。

就我对你的问题的理解,你想缩短元素的条件部分,以便不复制/粘贴长字符串多次。如果是这种情况,你不必在这里涉及MSI属性-你可以通过WiX预处理器功能实现这一点。

那么,执行以下操作:

  • 将条件定义为预处理器变量:

<?define ServerSetingIsNeeded = "(&Client = 3) OR (!Client = 3) OR (&CoreService = 3) OR (!CoreService = 3) OR (&ResourceService = 3) OR (!ResourceService = 3)>"?>

  • 使用变量代替condition:

<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ServersSettingsDlg" Order="1">$(var.ServerSetingIsNeeded)</Publish>

最新更新