Wix3:忽略<show>元素的可覆盖属性?

时间:2017-09-22 19:25:41

标签: dialog wix override

我正在使用Wix3.11并尝试自定义ExitDialog。对话框的源代码(wix3-wix31rtm.zip中的ExitDialog.wxs)使用以下语句安排此对话框:

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

因此,我将此文件作为MyExitDialog.wxs复制到我的本地目录,将Dialog Id从ExitDialog重命名为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的show元素覆盖原始的ExitDialog的show元素,但是它没有那样工作。

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

1 个答案:

答案 0 :(得分:1)

你的内容包括

<UIRef Id="WixUI_Minimal"/>

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

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

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

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

现在<Product>更新<UIRef>以引用您的新用户界面。

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

可覆盖标签有此文

  

如果“是”,则可以通过其他地方的排序来覆盖此对话框的排序。

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

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

并且没有得到任何重新定义错误,因为它被标记为可覆盖。

根本问题是您不能拥有<Show>

的两个OnExit="success"代码