首先,我将澄清一个代码片段,然后总结它为解决我遇到的问题所做的工作。随意提问,因为我不是常规海报,但我知道某些规则。
考虑以下匿名的WiX UIConfiguration:
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="WebInstallationAddressDlg" Order="1">1</Publish>
<!--When neither Feature1 nor Feature2 will be installed we shouldn't show the WebInstallationAddressDlg -->
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlgCustomized" Order="2"><![CDATA[&Feature1 <> 3 AND &Feature2 <> 3]]></Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="DoAction" Value="GetIISWebSites" Order="3">1</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="SpawnDialog" Value="Warning1" Order="4"><![CDATA[&Feature2 = 3 AND SKIPMESSAGE <> "1"]]></Publish>
<!--When Feature1 is set to be installed, the OS needs to be Server 2008 R2 or Server 2012 R2. So NOT (Server 2008 OR Server 2012).
NTProductType = 1 indicates that it can't be a client type installation (not Windows 7 for example) (see https://msdn.microsoft.com/library/aa370556.aspx) -->
<Publish Dialog="CustomizeDlg" Control="Next" Event="SpawnDialog" Value="Error1" Order="5"><![CDATA[&Feature1 = 3 AND ((VersionNT <> 601 AND VersionNT <> 603) OR MsiNTProductType = 1)]]></Publish>
这些是选项(从上到下):
什么有效:
什么行不通
我的印象是DoAction不关心它给出的Order(权重),并且当条件评估为TRUE时总是执行。 我想要的是当没有显示警告/错误时执行此DoAction。
额外信息
我正在使用Visual Studio(.wixproj)和一个bootstrapper项目来生成Setup.exe和第三个带有自定义操作的项目。
命名空间(它看起来实际上已经过时但它仍然有效)。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
答案 0 :(得分:1)
&#34;我的印象是DoAction并不关心它给出的订单(重量),并且当它的条件评估为TRUE时总是执行#34;&#34;
是对的。订单是它们运行的顺序,如果条件正确,它们都将运行。如果您希望仅在运行(或不运行)先前操作时才运行操作,则为其指定相同的条件。看起来你的GetIISWebSites上的条件是1,所以是的,它总会被调用。
此处的基本MSI文档说明了依次调用每个事件。
https://msdn.microsoft.com/en-us/library/aa368037(v=vs.85).aspx
另外请注意,您的条件不会违反有关可以发布的对话框数量的规则。它没有说出什么会出错,我也不知道。