簡體   English   中英

如果用戶單擊許可證頁面NSIS上的“取消”,則顯示完成頁面

[英]Show finish page if user click cancel on license page NSIS

我有兩個許可證頁面,在第二個許可證頁面中,如果用戶選擇不安裝第三方應用程序,它將顯示完成頁面。 到目前為止,我MUI_CUSTOMFUNCTION_ABORT onUserAbort上使用MUI_CUSTOMFUNCTION_ABORT onUserAbort進入完成頁面。

但是問題是當用戶單擊“跳過”按鈕(實際上是“取消”按鈕,我將其重命名為“跳過”)時,它將停留在許可證頁面上,並且“安裝”按鈕變為“下一步”按鈕(圖像1->圖像2->圖像3)。 我知道這是因為我在onUserAbort調用Abort 如果我不致電Abort ,那么當用戶單擊“跳過”時該窗口將自動關閉。

您知道如何直接轉到完成頁面嗎? (圖片1->圖片3,沒有圖片2)

!insertmacro MUI_PAGE_WELCOME
page custom CheckHWSpecs ShowNotMeetRequirementDialog
!insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\license1.txt"
!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
!insertmacro MUI_PAGE_INSTFILES
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_PAGE_CUSTOMFUNCTION_PRE Lic2Pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW Lic2Show
!insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\license2.txt"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!define MUI_CUSTOMFUNCTION_ABORT onUserAbort
!insertmacro MUI_LANGUAGE English

Lic2Pre上的代碼:

Function Lic2Pre
    StrCpy $R8 2
FunctionEnd

Lic2Show上的代碼:

Function Lic2Show
    GetDlgItem $0 $hwndparent 2
    SendMessage $0 ${WM_SETTEXT} 0 "STR:Skip"

    !insertmacro SelectSection ${SEC0013}
    !insertmacro UnselectSection ${SEC0000}
    !insertmacro UnselectSection ${SEC0002}
    !insertmacro UnselectSection ${SEC0003}
    !insertmacro UnselectSection ${SEC0004}
    !insertmacro UnselectSection ${SEC0005}
    !insertmacro UnselectSection ${SEC0007}
    !insertmacro UnselectSection ${SEC0010}
    !insertmacro UnselectSection ${SEC0011}
    !insertmacro UnselectSection ${SEC0012}
FunctionEnd

進入特定頁面的代碼:

Function RelGotoPage
  IntCmp $R9 0 0 Move Move
    StrCmp $R9 "X" 0 Move
      StrCpy $R9 "120"

  Move:
  SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd

用戶中止時的自定義函數:

Function onUserAbort
  StrCmp $R8 2 0 End
    StrCpy $R9 2
    Call RelGotoPage
    Abort
  End:
FunctionEnd

圖1:第二個許可證頁面

圖2:如果用戶單擊“跳過”

圖片3:完成頁面

!include Sections.nsh
!include WinMessages.nsh
ShowInstDetails show
!define MUI_CUSTOMFUNCTION_ABORT onUserAbort
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Examples\example1.nsi"
!insertmacro MUI_PAGE_INSTFILES
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_LICENSEPAGE_CHECKBOX_TEXT "Blah blah blah app and agree..."
!define MUI_PAGE_CUSTOMFUNCTION_SHOW Lic2Show
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE Lic2Leave
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Examples\example2.nsi"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Section /o "Bonus app" SID_BONUS
DetailPrint "Installing bonus app..."
Sleep 2222
SectionEnd

Section "Main app" SID_MAIN
DetailPrint "Installing main app..."
Sleep 2222
SectionEnd

var installBonus
Function Lic2Show
StrCpy $installBonus 1
GetDlgItem $0 $hwndparent 2
SendMessage $0 ${WM_SETTEXT} 0 "STR:&Skip"
!insertmacro UnselectSection ${SID_MAIN} ; Already installed, uncheck
FunctionEnd

Function Lic2Leave
${If} $installBonus == 1
    !insertmacro SelectSection ${SID_BONUS}
${EndIf}
FunctionEnd

Function onUserAbort
${If} $installBonus == 1
    StrCpy $installBonus 0
    System::Call 'USER32::PostMessage(i$HWNDPARENT,i0x408,i 1,i0)' ; Delayed skip 1 page
    Abort
${EndIf}
FunctionEnd

看看Wiki上的轉到NSIS頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM