Wix工具集 - 一个属性中的复合属性

时间:2013-09-14 23:00:44

标签: wix windows-installer wix3.7

使用Wix,如果本地计算机的操作系统与多个有效操作系统之一匹配,我将发布一个警告对话框。我可以通过在发布标记的条件部分中放置VersionNT = 601来执行此检查。

因为我需要检查多个操作系统和类型(服务器,域控制器等),我想在属性中存储其中一些条件,并在多个发布条件中使用这些自定义属性。

类似的东西:

<Property Id="WinServer08R2" Value="VersionNT = 601 AND MsiNTProductType = 3" />

然后使用此属性,如下所示:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="WarningDlg">
    WinServer08R2 AND Not Installed
</Publish>
...

到目前为止,这种方法或其略有变化都没有对我有用。有没有其他人尝试过这个并让它发挥作用?有人可能会建议我只是使用括号并使其工作,但这是一个简化的例子,条件很快就会失控。

提前致谢。

1 个答案:

答案 0 :(得分:3)

Property/@Value(以及该问题的内部文本)不是条件,它们是属性的实际值。所以你现在拥有的是一个名为WinServer08R2的属性,其文字值为VersionNT = 601 AND MsiNTProductType = 3。所以WinServer08R2总是求值为true,因为它有一个值。

您应该可以通过使用Orca打开生成的MSI并查看Property表来验证这一点。

您想要的是根据条件设置您的财产。

<SetProperty Id="WinServer08R2" Value="1">
    VersionNT = 601 AND MsiNTProductType = 3
</SetProperty>

然后您只需使用WinServer08R2 = 1WinServer08R2来测试该属性。

不要忘记使用BeforeAfterSequence属性对自定义操作进行排序。