2017-09-22 42 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到其他序列。 –