2017-09-22 41 views
0

我正在使用Wix3.11并尝试自定义ExitDialog。对话框的源代码(在wix3-wix31rtm.zip ExitDialog.wxs)时间表此对话框下面的语句:Wix3:忽略<Show>元素的可重写属性?

<Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /> 

所以,我复制该文件到我的本地目录MyExitDialog.wxs,重命名对话框从ExitDialog ID来MyExitDialog和预定此对话框:

<Show Dialog="MyExitDialog" OnExit="success" /> 

但是,当我跑光,我得到了以下错误:

MyExitDialog.wxs(37): error LGHT1050: The AdminUISequence table contains actions 'MyExitDialog' and 'ExitDialog' which both have the same sequence number -1. Please change the sequence number for one of these actions to avoid an ICE warning. 
C:\build\work\eca3d12b\wix3\src\ext\UIExtension\wixlib\ExitDialog.wxs(29): error LGHT1051: The location of the action related to previous warning. 

我期待MyExitDialog秀埃尔ement覆盖原来的ExitDialog的show元素,但它不是那样工作的。

我误解了Overridable属性的工作原理吗?或者,我看着错误的ExitDialog.wxs文件?

回答

1

你包括在你的安装喜欢的事

<UIRef Id="WixUI_Minimal"/> 

。您需要找到相关的UI文件(here),并将该文件的内容复制到wix项目中的新wxs中。你可以命名这个“MyUI”或其他东西,也可以将<UI Id="...">标记中的标识从“WixUI_Minimal”更新为其他内容(例如)。

在刚刚创建的新文件,更新一行

<Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /> 

<Show Dialog="MyExitDialog" OnExit="success" /> 

现在,在您<Product>更新程序<UIRef>引用您的新UI。

WixUIExtension包含一个wixlib,其中包含UI和对话框的所有定义。您只是在您的项目中定义了一个新的退出对话框,但旧的对话框仍然存在,并在WixUIExtension dll中定义。既然你还在使用旧的UIRef,那么它就会带入你所定义的一个对话框。这导致序列-1的动作的双重定义。

可重写标签有这段文字

If "yes", the sequencing of this dialog may be overridden by sequencing elsewhere.

这意味着你可以重新定义对话框的排序:

<Show Dialog="ExitDialog" Sequence="55" Overridable="yes"/> 
(or Before="..." or After="..." or OnExit="...") 

,并因为它标志着重写没有得到任何重新定义的错误。

问题的根源是,你不能有两个<Show>标签都与OnExit="success"

+0

感谢您的回答。我想'Overrideable'属性会允许其他对话框'覆盖'序列-1。但是,它实际上做的是允许重新安排ExitDialog到其他序列。 –