Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nsis 如何在nsDialogs页面后获得“完成”按钮_Nsis - Fatal编程技术网

Nsis 如何在nsDialogs页面后获得“完成”按钮

Nsis 如何在nsDialogs页面后获得“完成”按钮,nsis,Nsis,我正在尝试使用nsDialogs在nsis脚本中创建安装后配置页面。我收集输入和执行配置的脚本可以工作,但是在我完成之后,我从来没有看到过finish/close/exit按钮。当前我的页面声明如下所示: Page directory Page instfiles Page custom nsDialogsPage nsDialogsPageLeave 如何在nsDialogsPageLeave执行后显示finish/exit/done按钮?经典NSIS UI没有完成页面,instfiles页

我正在尝试使用nsDialogs在nsis脚本中创建安装后配置页面。我收集输入和执行配置的脚本可以工作,但是在我完成之后,我从来没有看到过finish/close/exit按钮。当前我的页面声明如下所示:

Page directory
Page instfiles
Page custom nsDialogsPage nsDialogsPageLeave

如何在nsDialogsPageLeave执行后显示finish/exit/done按钮?

经典NSIS UI没有完成页面,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

经典NSIS UI(也称为不使用现代UI)没有完成页面,您想要单独的完成页面还是只更改自定义页面上按钮的名称?是的,我最后在导入文件之前移动了配置屏幕。不过,我正在尝试将整个过程转换为现代UI。