Классический пользовательский интерфейс NSIS не имеет конечной страницы, страница instfiles обычно является последней страницей, и после выполнения всех разделов будет отображаться «кнопка завершения». Вы можете установить текст любой кнопки на ту же строку с помощью SendMessage $hwndButton ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"
, если хотите указать свою собственную конечную страницу.
Большинство установщиков запрашивают требуемую информацию перед страницей instfiles. Если вы не можете сделать это, возможно, вы захотите использовать Современный пользовательский интерфейс , он предоставит вам конечную страницу:
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_FINISH
Мне было немного неясно, хотите ли вы две страницы; страница ввода, а затем завершающая страница или комбинированная страница ввода / завершения. Комбинированная страница немного странная, но это возможно:
!define AppName "Test"
Name "${AppName}"
Outfile "${AppName} setup.exe"
InstallDir $temp
!include LogicLib.nsh
!include WinMessages.nsh
!include nsDialogs.nsh
Var MyEndConfigPageStage
Page Directory
Page InstFiles
Page Custom MyEndConfigPageCreate MyEndConfigPageLeave /EnableCancel
Function MyEndConfigPageCreate
StrCpy $MyEndConfigPageStage 0
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:&Apply"
nsDialogs::Create 1018
Pop $0
${NSD_CreateCheckBox} 0 13u 100% -13u "FooBar"
Pop $1
nsDialogs::Show
FunctionEnd
Function MyEndConfigPageLeave
${If} $MyEndConfigPageStage > 0
Return
${EndIf}
${NSD_GetState} $1 $2
ClearErrors
WriteIniStr "$instdir\settings.ini" Dummy "FooBar" $2
${If} ${Errors}
MessageBox mb_iconstop "Unable to apply settings!"
Abort
${EndIf}
IntOp $MyEndConfigPageStage $MyEndConfigPageStage + 1
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"
GetDlgItem $0 $hwndparent 2
EnableWindow $0 0 ;Disable cancel
EnableWindow $1 0 ;Disable the checkbox
Abort
FunctionEnd
Section
SectionEnd