Nsis 安装完成后,创建自定义页面
我正在编写一个脚本,该脚本正在安装我在electron中制作的应用程序,到目前为止,一切似乎都运行良好。但是有一个问题,我可以添加新的自定义页面,但它是在安装之前添加的。这是一个问题,因为此页面包含两个用户必须填写的输入字段,然后提供的数据存储在安装应用程序的目录中。但由于此步骤之后安装了应用程序,所以目录会被覆盖,文件也会消失。代码如下:Nsis 安装完成后,创建自定义页面,nsis,electron-builder,Nsis,Electron Builder,我正在编写一个脚本,该脚本正在安装我在electron中制作的应用程序,到目前为止,一切似乎都运行良好。但是有一个问题,我可以添加新的自定义页面,但它是在安装之前添加的。这是一个问题,因为此页面包含两个用户必须填写的输入字段,然后提供的数据存储在安装应用程序的目录中。但由于此步骤之后安装了应用程序,所以目录会被覆盖,文件也会消失。代码如下: !include nsDialogs.nsh !include LogicLib.nsh XPStyle on Var Dialog Var UserL
!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完全陌生,因此我不知道如何完成此任务。页面的显示顺序与源文件中的显示顺序相同,因此您可以执行以下操作:
Page Directory
Page InstFiles
Page Custom MyPage
理想情况下,您应该在安装步骤(InstFiles
)之前收集所需的信息,并且您已经差不多做到了。您的自定义页面将信息存储在全局变量中,您只需将文件*
操作移动到部分
。如果您这样做,那么您的自定义页面可以随时出现在InstFiles
页面之前。您可以在安装前和安装后更改为插入页面。
示例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
啊,我试过了,但如果我这样做,这个安装程序会执行两次安装,因为某种原因,在自定义MyPage之后,它会再次运行默认安装程序,我想这与electron builder编译它有关。这是可能的,我不知道electron builder是如何工作的。然后你必须接受我的其他建议,在不同的时间将收集和编写分为两个不同的步骤。你的示例代码缺少所有其他页面行,你的问题是关于页面顺序的!我尝试放置其他页面,但它们会执行两次,例如,如果您放置
页面InstFiles
它将安装应用程序,然后再次启动默认安装程序并再次安装,可能在electron builder中有这样的配置,我不知道为什么会发生这种情况。