0

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

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

4

1 回答 1

2

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

因此,您尝试在构建期间引用运行时值,这是不正确的。我确信可以解释为什么结果属性的计算结果为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>

于 2013-01-09T15:01:50.450 回答