我正在处理一个脚本,该脚本正在安装用电子制作的应用程序,到目前为止,一切似乎都工作正常。但是,有一个问题,我能够添加新的自定义页面,但是它是在安装之前添加的。这是一个问题,因为此页面包含两个输入字段,用户必须填写这些输入字段,然后将提供的数据存储在安装了app的目录中。但是由于在此步骤之后安装了应用程序,因此目录将被覆盖并且文件消失了。这是代码:
!include nsDialogs.nsh
!include LogicLib.nsh
XPStyle on
Var Dialog
Var UserLabel
Var UserText
Var UserState
Var PassLabel
Var PassText
Var PassState
Page custom nsDialogsPage nsDialogsPageLeave
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Username:"
Pop $UserLabel
${NSD_CreateText} 0 13u 100% 12u $UserState
Pop $UserText
${NSD_CreateLabel} 0 39u 100% 12u "Password:"
Pop $PassLabel
${NSD_CreatePassword} 0 52u 100% 12u $PassState
Pop $PassText
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetText} $UserText $UserState
${NSD_GetText} $PassText $PassState
${If} $UserState == ""
MessageBox MB_OK "Username is missing."
Abort
${EndIf}
${If} $PassState == ""
MessageBox MB_OK "Password is missing."
Abort
${EndIf}
StrCpy $1 $UserState
StrCpy $2 $PassState
FileOpen $9 $INSTDIR\credentials.txt w
FileWrite $9 "$1:$2"
FileClose $9
SetFileAttributes $INSTDIR\credentials.txt HIDDEN|READONLY
FunctionEnd
Section
SectionEnd
是的,最好的做法是在安装后而不是之前安装此页面。谢谢您的全方位指导,我是NSIS的新手,所以我不知道如何实现这一目标。
答案 0 :(得分:1)
页面的显示顺序与源文件中显示的顺序相同,因此您可以执行以下操作:
Page Directory
Page InstFiles
Page Custom MyPage
理想情况下,您应该在安装步骤(InstFiles
)之前收集所需的信息,并且您已经快要准备好了。您的自定义页面将信息存储在全局变量中,您要做的就是将File*
操作移至Section
。如果您采用这种方式,则您的自定义页面可以在InstFiles
页面之前的任何时间出现。
答案 1 :(得分:0)
安装前有customPageAfterChangeDir macros可以更改为插入页面,安装后有customFinishPage macros。 示例 if installer.nsh
!include nsDialogs.nsh
!macro customPageAfterChangeDir
Page custom customPageCreator customPageLeave "Custom page caption"
Var Dialog
Function customPageCreator
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
MessageBox MB_OK "customPageCreator"
nsDialogs::Show
FunctionEnd
Function customPageLeave
MessageBox MB_OK "customPageLeave"
FunctionEnd
!macroend