我正在使用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文件吗?
答案 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"
代码