结合新房产的特征条件

时间:2013-01-09 06:58:30

标签: wix

我有一个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>

但它不起作用并始终显示该对话框。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

当您在WiX中使用<Property>元素定义MSI属性时,它是在构建时构建的,并且在构建MSI包时,您最终会在Property table中创建记录。另一方面,功能状态在运行时解析,即安装包时。

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

据我了解你的问题,你想缩短元素的条件部分,以免多次复制/粘贴长字符串。如果是这种情况,您不必在此处涉及MSI属性 - 您可以使用WiX预处理器功能实现此目的。

所以,请执行以下操作:

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

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

  • 使用变量而不是条件:

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