2011-04-29 128 views
1

只有在需要時纔可以調用MUI對話框的PRE功能嗎?在NSIS安裝程序中調用MUI的PRE功能,跳過NSIS安裝程序中的頁面/對話框

!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage 
!insertmacro MUI_PAGE_COMPONENTS 

Function SkipComponentsPage 
Abort 
MessageBox MB_OK "You chose to UPDATE your current version" 
FunctionEnd 

//這部分將被默認選中,那就是,用戶將無法選擇或取消這部分,這已經被執行..........怎麼辦這個?爲了隱藏它,我在它的名字中包含了一個 - 符號。它的名字是「強制性」

Section "-mandatory" SEC_UPDATE 
    #Do update............ 
SectionEnd 

我有我的自定義對話框頁面上有兩個單選按鈕(演示&更新)在NSIS安裝。 我希望當用戶選擇安裝UPDATE(選擇UPDATE RadioButton)時,那麼Components Page將被跳過,並且指定的Section被自動CHECKED並執行。

但是,如果用戶選擇安裝DEM(選擇DEMO RadioButton),那麼組件頁面不會被跳過&用戶可以選中或取消選中該組件頁面上的節。

回答

1

一個頁面的回調總是被調用,但你可以把邏輯函數內部:

... 
section "" SEC_UPDATE 
sectionend 

Function SkipComponentsPage 
!insertmacro UnSelectSection ${SEC_UPDATE} ; Don't include update with demo by default? 
${If} $InstallType == UPDATE 
    !insertmacro SelectSection ${SEC_UPDATE} 
    Abort 
${EndIf} 
Functionend 

,如果你希望用戶能夠選擇更新的演示模式下,它是不是真的我清楚,但如果你要強制更新可以使部分只讀:

section "Update" SEC_UPDATE 
SectionIn RO 
sectionend 

(並從預函數調用UnSelectSection)

...或只是讓部分用你建議的名稱前綴隱藏。

+0

先生,您是否看到我之前在其中討論過的帖子,請幫助我,我卡住了,我已發表評論 – sqlchild 2011-04-29 10:48:54

+0

沒有先生,在演示模式下,用戶將無法更新,兩者都是完全的單獨 – sqlchild 2011-04-29 10:50:23

+0

我會將此代碼粘貼到您昨天的代碼中,它會起作用嗎? – sqlchild 2011-04-29 10:56:33