InstallOptions 和定制页面
InstallOptions 是一个 NSIS 插件,他能让安装程序开发人员创建定制的向导页面来获得内置向导页面不能提供的用户输入。
InstallOptions 会创建内嵌在 NSIS 窗体中的对话框。InstallOptions 的控件用 INI 文件描述。该文件可以用可视化工具生成。HM NIS EDIT 就是这样的一个工具。
InstallOptions 控件 INI 文件的结构
InstallOptions INI 文件包含一个必须的段。它包含了控件的数量、窗体的属性等。该文还可包含描述具体空间的段。
必须的段是 Settings,它可以包含以下内容:
NumFields(必须的) 该对话框包含的控件数目
Title (可选的) Windows窗体的标题
CancelEnabled (可选的) 是否启用Cancel按钮,1:是,0:否
CancelShow (可选的) 是否显示Cancel按钮,1:是,0:否
BackEnabled (可选的) 是否启用Back按钮,1:是,0:否
CancelButtonText (可选的) Cancel按钮的显示文字
NextButtonText (可选的) Next按钮的显示文字
BackButtonText (可选的) Back按钮的显示文字
Rect (可选的)
RTL (可选的)
State (output) This is not something you have to supply yourself but is set by InstallOptions, before calling your custom page validation function, to the field number of the custom Button control (or other control having the Notify flag) the user pressed, if any.
每个控件段以"Field #"模式命名,井号表示数字,从1开始。控件有以下属性:
Type (required) 控件的类型,有"Label", "Text", "Password", "Combobox", "DropList", "Listbox", "CheckBox", "RadioButton", "FileRequest" , "DirRequest" "Icon", "Bitmap", "GroupBox", "Link" 或 "Button"。
"Label" 用来显示静态文本
"Text" 和 "Password" 和 HTML 中的类似,用来接受用户输入。
"Combobox"允许用户输入列表中不存在的项, "Droplist" 则只能选择列表中规定的项。
"Listbox" 显示多个选项(不用下拉即可看到),并允许多选
"CheckBox" "RadioButton" 和 Windows中的相应控件类似。
"FileRequest" 显示一个输入框和浏览按钮,允许用户用文件选择对话框选取文件。
"DirRequest" 和 "FileRequest" 类似,但只选取到目录。
"Icon" 显示图标
"Bitmap" 显示位图
"GroupBox" 显示组合框
"Link" 显示超链
"Button" 按钮
Text (可选的) 对 checkbox,radio button 控件是 caption;对 DirRequest 控件是浏览对话框的标题;对图标,位图控件是图像文件的的路径。
State (可选的) 控件状态,该状态可以在 nsi 脚本读取。对于文本类型的控件,state 的值是用户输入的字符串。对于 radio button 和 check boxes state 为'0'或'1'。对 list boxes, combo boxes 和 drop lists 状态值是选中的选项,如果有多个则用管道符号'|'分割。 对于超链和按钮 State 是可以用 ShellExecute 执行的字符串。
ListItems (可选的) combobox, droplist, 或 listbox的选项,选项之间用管道符号'|'分割
MaxLen (可选的) 最大输入长度
MinLen (可选的) 最小输入长度
ValidateText (可选的) 校验文本
Left
Right
Top
Bottom (required) 控件坐标,在可视化环境中不重要。
Filter (可选的) 指定 "FileRequest" 控件的文件过滤器,模式如 文本文件|*.txt|程序文件|*.exe;*.com|所有文件|*.*
Root (可选的) 指定"DirRequest" 控件的根目录
Flags (可选的) 指定控件的修饰。多个值用管道符号'|'分割且不能有空格。有效的值如下:
Value Meaning
REQ_SAVE 将 "FileRequest" 控件变成 "另存为" 对话框
FILE_MUST_EXIST 用于 "FileRequest" 控件,规定所选文件是否必须存在
FILE_EXPLORER 用于 "FileRequest" 控件
FILE_HIDEREADONLY 用于 "FileRequest" 控件,隐藏 "open read only"checkbox
WARN_IF_EXIST 用于 "FileRequest" 控件,显示警告如果文件已存在
PATH_MUST_EXIST 用于 "FileRequest" 控件,规定输入的路径必须存在
PROMPT_CREATE 用于 "FileRequest" 控件,在创建之前显示警告如果文件或路径不存在
RIGHT 用于"Checkbox"和Radiobutton"控件,规定文字出现在左边,很少用
MULTISELECT 用于"Listbox"控件允许多选
EXTENDEDSELCT 用于"Listbox"控件允许多选
RESIZETOFIT 用于"Bitmap"控件,将图片扩大到控件的大小
GROUP 多个控件分组,该标志放在同组的第一个控件上。
NOTABSTOP 禁止tab键焦点落在该控件上
DISABLED 禁用控件
ONLY_NUMBERS 用于"Text"控件,Forces the user to enter only numbers into the edit box.
MULTILINE 用于"Text"控件,允许多行输入
WANTRETURN 用于"Text"控件,允许多行输入,规定按下Enter键时插入回车
NOWORDWRAP 用于"Text"控件,允许多行输入禁用word-wrap
HSCROLL 显示水平方向的滚动条
VSCROLL 显示垂直方向的滚动条
READONLY 用于"Text"控件,使文本输入框变成只读
NOTIFY 用于"Button", "Link", "CheckBox", "RadioButton", "ListBox"和"DropList"控件。使InstallOptions触发事件,调用定制页面的validation/leave方法。
TxtColor (可选的) 用于"Link"控件,指定文本的前景色,格式为: 0xBBRRGG (十六进制)
使用定制向导页的步骤:
1. 设计定制向导页界面,产生界面描述ini文件,可以使用HM NIS Edit的可视化工具简化开发
2. 编写nsi脚本:
首先,如果使用了lzma,gzip等压缩算法,需要在所有File指令前reserve定制界面的ini文件:ReserveFile ".ini"。
然后,在.onInit方法中使用宏!insertmacro MUI_INSTALLOPTIONS_EXTRACT ".ini"。
接着,编写定制对话框的显示函数。
最后,用Page指令在合适的位置插入该向导页面。
定制对话框显示函数的示例:
Function setChooseBuildArea
!insertmacro MUI_HEADER_TEXT "请选择构建目录" "请选择构建目录"
!insertmacro MUI_INSTALLOPTIONS_WRITE "buildarea.ini" "Field 2" "State" "$INSTDIR\buildarea"
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "buildarea.ini"
FunctionEnd
该函数的第一行代码设置向导页面的头上的文字;第二行代码设置向导页面第二个控件的State为"$INSTDIR\buildarea",也就是设置该控件的默认值;第三行代码显示对话框。
用Page指令插入向导页的代码如下:
Page custom setChooseBuildArea "" "--选择构建目录"
该指令接受三个参数,前两个是该页面的显示函数和离开函数,第三个是显示在标题栏的文字。
nsi的变量如果存放字符串的话,默认只能保存1024。对于复杂的Java应用,由于需要设置Classpath其命令行的长度往往会超过1024。此时,必须让nsi的变量支持大于1024的字符串长度。有两种方法解决此问题,一个是到http: // nsis.sourceforge.net/download/specialbuilds/处下载Special Builds,目前一个称为Large strings的build支持可以存放8192个字符的变量;另外一个就是手工编译 NSIS的源代码,加上需要的选项。
InstallOptions 是一个 NSIS 插件,他能让安装程序开发人员创建定制的向导页面来获得内置向导页面不能提供的用户输入。
InstallOptions 会创建内嵌在 NSIS 窗体中的对话框。InstallOptions 的控件用 INI 文件描述。该文件可以用可视化工具生成。HM NIS EDIT 就是这样的一个工具。
InstallOptions 控件 INI 文件的结构
InstallOptions INI 文件包含一个必须的段。它包含了控件的数量、窗体的属性等。该文还可包含描述具体空间的段。
必须的段是 Settings,它可以包含以下内容:
NumFields(必须的) 该对话框包含的控件数目
Title (可选的) Windows窗体的标题
CancelEnabled (可选的) 是否启用Cancel按钮,1:是,0:否
CancelShow (可选的) 是否显示Cancel按钮,1:是,0:否
BackEnabled (可选的) 是否启用Back按钮,1:是,0:否
CancelButtonText (可选的) Cancel按钮的显示文字
NextButtonText (可选的) Next按钮的显示文字
BackButtonText (可选的) Back按钮的显示文字
Rect (可选的)
RTL (可选的)
State (output) This is not something you have to supply yourself but is set by InstallOptions, before calling your custom page validation function, to the field number of the custom Button control (or other control having the Notify flag) the user pressed, if any.
每个控件段以"Field #"模式命名,井号表示数字,从1开始。控件有以下属性:
Type (required) 控件的类型,有"Label", "Text", "Password", "Combobox", "DropList", "Listbox", "CheckBox", "RadioButton", "FileRequest" , "DirRequest" "Icon", "Bitmap", "GroupBox", "Link" 或 "Button"。
"Label" 用来显示静态文本
"Text" 和 "Password" 和 HTML 中的类似,用来接受用户输入。
"Combobox"允许用户输入列表中不存在的项, "Droplist" 则只能选择列表中规定的项。
"Listbox" 显示多个选项(不用下拉即可看到),并允许多选
"CheckBox" "RadioButton" 和 Windows中的相应控件类似。
"FileRequest" 显示一个输入框和浏览按钮,允许用户用文件选择对话框选取文件。
"DirRequest" 和 "FileRequest" 类似,但只选取到目录。
"Icon" 显示图标
"Bitmap" 显示位图
"GroupBox" 显示组合框
"Link" 显示超链
"Button" 按钮
Text (可选的) 对 checkbox,radio button 控件是 caption;对 DirRequest 控件是浏览对话框的标题;对图标,位图控件是图像文件的的路径。
State (可选的) 控件状态,该状态可以在 nsi 脚本读取。对于文本类型的控件,state 的值是用户输入的字符串。对于 radio button 和 check boxes state 为'0'或'1'。对 list boxes, combo boxes 和 drop lists 状态值是选中的选项,如果有多个则用管道符号'|'分割。 对于超链和按钮 State 是可以用 ShellExecute 执行的字符串。
ListItems (可选的) combobox, droplist, 或 listbox的选项,选项之间用管道符号'|'分割
MaxLen (可选的) 最大输入长度
MinLen (可选的) 最小输入长度
ValidateText (可选的) 校验文本
Left
Right
Top
Bottom (required) 控件坐标,在可视化环境中不重要。
Filter (可选的) 指定 "FileRequest" 控件的文件过滤器,模式如 文本文件|*.txt|程序文件|*.exe;*.com|所有文件|*.*
Root (可选的) 指定"DirRequest" 控件的根目录
Flags (可选的) 指定控件的修饰。多个值用管道符号'|'分割且不能有空格。有效的值如下:
Value Meaning
REQ_SAVE 将 "FileRequest" 控件变成 "另存为" 对话框
FILE_MUST_EXIST 用于 "FileRequest" 控件,规定所选文件是否必须存在
FILE_EXPLORER 用于 "FileRequest" 控件
FILE_HIDEREADONLY 用于 "FileRequest" 控件,隐藏 "open read only"checkbox
WARN_IF_EXIST 用于 "FileRequest" 控件,显示警告如果文件已存在
PATH_MUST_EXIST 用于 "FileRequest" 控件,规定输入的路径必须存在
PROMPT_CREATE 用于 "FileRequest" 控件,在创建之前显示警告如果文件或路径不存在
RIGHT 用于"Checkbox"和Radiobutton"控件,规定文字出现在左边,很少用
MULTISELECT 用于"Listbox"控件允许多选
EXTENDEDSELCT 用于"Listbox"控件允许多选
RESIZETOFIT 用于"Bitmap"控件,将图片扩大到控件的大小
GROUP 多个控件分组,该标志放在同组的第一个控件上。
NOTABSTOP 禁止tab键焦点落在该控件上
DISABLED 禁用控件
ONLY_NUMBERS 用于"Text"控件,Forces the user to enter only numbers into the edit box.
MULTILINE 用于"Text"控件,允许多行输入
WANTRETURN 用于"Text"控件,允许多行输入,规定按下Enter键时插入回车
NOWORDWRAP 用于"Text"控件,允许多行输入禁用word-wrap
HSCROLL 显示水平方向的滚动条
VSCROLL 显示垂直方向的滚动条
READONLY 用于"Text"控件,使文本输入框变成只读
NOTIFY 用于"Button", "Link", "CheckBox", "RadioButton", "ListBox"和"DropList"控件。使InstallOptions触发事件,调用定制页面的validation/leave方法。
TxtColor (可选的) 用于"Link"控件,指定文本的前景色,格式为: 0xBBRRGG (十六进制)
使用定制向导页的步骤:
1. 设计定制向导页界面,产生界面描述ini文件,可以使用HM NIS Edit的可视化工具简化开发
2. 编写nsi脚本:
首先,如果使用了lzma,gzip等压缩算法,需要在所有File指令前reserve定制界面的ini文件:ReserveFile ".ini"。
然后,在.onInit方法中使用宏!insertmacro MUI_INSTALLOPTIONS_EXTRACT ".ini"。
接着,编写定制对话框的显示函数。
最后,用Page指令在合适的位置插入该向导页面。
定制对话框显示函数的示例:
Function setChooseBuildArea
!insertmacro MUI_HEADER_TEXT "请选择构建目录" "请选择构建目录"
!insertmacro MUI_INSTALLOPTIONS_WRITE "buildarea.ini" "Field 2" "State" "$INSTDIR\buildarea"
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "buildarea.ini"
FunctionEnd
该函数的第一行代码设置向导页面的头上的文字;第二行代码设置向导页面第二个控件的State为"$INSTDIR\buildarea",也就是设置该控件的默认值;第三行代码显示对话框。
用Page指令插入向导页的代码如下:
Page custom setChooseBuildArea "" "--选择构建目录"
该指令接受三个参数,前两个是该页面的显示函数和离开函数,第三个是显示在标题栏的文字。
nsi的变量如果存放字符串的话,默认只能保存1024。对于复杂的Java应用,由于需要设置Classpath其命令行的长度往往会超过1024。此时,必须让nsi的变量支持大于1024的字符串长度。有两种方法解决此问题,一个是到http: // nsis.sourceforge.net/download/specialbuilds/处下载Special Builds,目前一个称为Large strings的build支持可以存放8192个字符的变量;另外一个就是手工编译 NSIS的源代码,加上需要的选项。