nsis - 创建自定义页面,安装完成后
问题描述
我正在编写一个脚本,该脚本正在安装我用电子制作的应用程序,到目前为止一切似乎都运行良好。但是有一个问题,我能够添加新的自定义页面,但它是在安装之前添加的。这是一个问题,因为此页面包含用户必须填写的两个输入字段,然后提供的数据存储在安装应用程序的目录中。但是因为在此步骤之后安装了应用程序,所以目录被覆盖并且文件消失了。这是代码:
!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
并且您几乎已经完成了。您的自定义页面将信息存储在全局变量中,您所要做的就是将File*
操作移至Section
. 如果您这样做,那么您的自定义页面可以在InstFiles
页面之前的任何时间出现。
推荐阅读
- c# - 如何在 Xamarin Android 中使用 FinishActivity()?
- ruby-on-rails - 我想隐藏下拉列表中包含的包而不触摸我的模型
- python - 从另一个数据框填充数据框的列
- java - Java servlet 跟踪 API 命中率
- php - 如何在 Laravel 中将 user_id 添加到登录参数?
- java - 从集合中检索项目
- javascript - 将数组绑定到 Knockout 样式绑定
- javascript - js/ts中模块动态导入的静态代码分析
- oracle - 执行具有来自 BODS 的授权语句的过程
- java - 使用switch case制作计算器