2014-11-04 1 views
0

두 번째 라이센스 페이지가 있고 두 번째 라이센스 페이지에서 타사 앱을 설치하지 않기로 선택하면 완료 페이지가 표시됩니다. 지금까지 나는 MUI_CUSTOMFUNCTION_ABORT onUserAbort을 사용하여 마무리 페이지로 이동합니다.사용자가 라이선스 페이지에서 취소를 클릭하면 마무리 페이지를 표시합니다. NSIS

하지만 사용자가 건너 뛰기 버튼을 클릭하면 (실제로는 취소 버튼이며 이름을 Skip으로 변경) 라이센스 페이지에 계속 남아있을 것이며 설치 버튼이 다음 버튼으로 변경됩니다 (이미지 1 -> 이미지 2 -> 이미지 삼). 내가 AbortonUserAbort에 호출했기 때문에 이것이 일어난다는 것을 알고 있습니다. Abort으로 전화하지 않으면 사용자가 건너 뛰기를 클릭하면 창이 자동으로 닫힙니다.

마침 페이지로 직접 이동하는 방법을 알고 있습니까? (이미지 1 -> 이미지 2없는 이미지 3)

!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의 코드 : Lic2Show에

Function Lic2Pre 
    StrCpy $R8 2 
FunctionEnd 

코드 :

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 

사용자 ab의 사용자 지정 기능 오트 :

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

Image 1: The second license page

Image 2: If user click Skip

Image 3: Finish Page

답변

1
!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 
0

는 이미 그 기능을 사용하는 위키

+0

Go to a NSIS page 살펴 유무 : RelGotoPage를하지만 이후 취소 버튼, Abor를 사용해야합니다. 티 – currarpickt