热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NSIS2.0界面快速入门

NSIS2.0版本支持定制的用户界面。所谓的ModernUI(下称MUI)就是一种模仿最新的Windows界面风格的界面系统。MUI改变了NSIS脚本的编写习惯,它使用NSIS的宏

NSIS 2.0 版本支持定制的用户界面。所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统。MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS 的宏来表达,指定 MUI 的属性需要使用宏。所以,诸如 LicenseText, Icon, CheckBitmap, InstallColors 在 MUI 中失去意义。
MUI 的内置向导页面
和安装程序有关的向导页面
MUI_PAGE_WELCOME 该向导页面显示欢迎信息
MUI_PAGE_LICENSE text/rtf_file 该向导页面显示软件授权申明
MUI_PAGE_COMPONENTS 该向导页面显示安装组件选择
MUI_PAGE_DIRECTORY 该向导页面显示安转目录选择
MUI_PAGE_STARTMENU page_id variable 该向导页面显示开始菜单目录选择
MUI_PAGE_INSTFILES 该向导页面显示安装进度
MUI_PAGE_FINISH 该向导页面显示安装结束
和卸载程序有关的向导页面
MUI_UNPAGE_WELCOME
MUI_UNPAGE_CONFIRM
MUI_UNPAGE_LICENSE text/rtf_file
MUI_UNPAGE_COMPONENTS
MUI_UNPAGE_DIRECTORY
MUI_UNPAGE_INSTFILES
MUI_UNPAGE_FINISH
页面的属性设定需要放在插入页面的宏之前。比如:
Var PLUGINS_FOLDER
!define MUI_DIRECTORYPAGE_VARIABLE $PLUGINS_FOLDER
!insertmacro MUI_PAGE_DIRECTORY
这段 nsi 脚本表示,将目录选择页面中用户选择的目录位置存放到变量 $PLUGINS_FOLDER 中去。
以下是 MUI 各个内置向导页面属性说明:
所有页面适用的属性
MUI_PAGE_HEADER_TEXT text
显示在向导页头上的文字
MUI_PAGE_HEADER_SUBTEXT text
显示在向导页头上的文字,它是通常显示在 MUI_PAGE_HEADER_TEXT 之下,表示对 MUI_PAGE_HEADER_TEXT 的进一步解释。
对于使用 InstallOptions 的定制界面,使用宏 !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)" 实现类似功能。
欢迎页面属性
MUI_WELCOMEPAGE_TITLE title
显示在欢迎向导页上的标题
MUI_WELCOMEPAGE_TITLE_3LINES
标题区的空格
MUI_WELCOMEPAGE_TEXT text
显示在欢迎向导页上的文字。使用\r\n换行。
通常这些属性不需要制定,省缺的值已经足够。
软件授权页面属性
在软件授权页面中可以定制用户接受软件授权许可的三种方式,一是按钮,二是 checkbox,三是 radio。
MUI_LICENSEPAGE_TEXT_TOP text
显示在页面顶部的文字
MUI_LICENSEPAGE_TEXT_BOTTOM text
显示在页面底部的文字
MUI_LICENSEPAGE_BUTTON button_text
按钮方式时按钮上的文字
MUI_LICENSEPAGE_CHECKBOX
定义此宏表示用户需要钩选该 checkbox 来接受软件许可
MUI_LICENSEPAGE_CHECKBOX_TEXT text
在 checkbox 旁显示的文字
MUI_LICENSEPAGE_RADIOBUTTONS
定义此宏表示用户需要钩选相应的 radio box 来接受或拒绝软件许可
MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text
在 radio 旁显示的表示接受的文字
MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text
在 radio 旁显示的表示拒绝的文字
安装组件选择页面属性
MUI_COMPONENTSPAGE_TEXT_TOP text
显示在页面顶部的文字
MUI_COMPONENTSPAGE_TEXT_COMPLIST text
显示在组件列表旁边的文字
MUI_COMPONENTSPAGE_TEXT_INSTTYPE text
显示在安转类型下拉框旁边的文字
MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE text
显示在描述框顶部的文字
MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO text
当没有安装组件选中时,显示在描述框中的文字
安装目录选择页面属性
MUI_DIRECTORYPAGE_TEXT_TOP text
显示在页面顶部的文字
MUI_DIRECTORYPAGE_TEXT_DESTINATION text
显示在目地目录选择框上的文字
MUI_DIRECTORYPAGE_VARIABLE variable
存放用户选择的目录的变量,默认是 $INSTDIR
MUI_DIRECTORYPAGE_VERIFYONLEAVE
在离开该页面时验证目录的有效性,不禁用"下一步"这个按钮
开始菜单目录选择页面
创建快捷方式的代码应当放在 MUI_STARTMENU_WRITE_BEGIN 和 MUI_STARTMENU_WRITE_END 之间,示例如下:
!insertmacro MUI_STARTMENU_WRITE_BEGIN page_id
...create shortcuts...
!insertmacro MUI_STARTMENU_WRITE_END
这里的 page_id 是用户选择要创建快捷方式的页面。
MUI_STARTMENUPAGE_TEXT_TOP text
显示在页面顶部的文字
MUI_STARTMENUPAGE_TEXT_CHECKBOX text
显示在 checkbox 旁的表示禁止快捷方式创建的文字
MUI_STARTMENUPAGE_DEFAULTFOLDER folder
默认的开始菜单目录
MUI_STARTMENUPAGE_NODISABLE
不实现用于禁止快捷方式创建的 checkbox
MUI_STARTMENUPAGE_REGISTRY_ROOT root
MUI_STARTMENUPAGE_REGISTRY_KEY key
MUI_STARTMENUPAGE_REGISTRY_VALUENAME value_name
这三项用于指定开始菜单设定在注册表中的键和值,用于记录用户的偏好。在卸载时应当删除之。
卸载程序可以用宏MUI_STARTMENU_GETFOLDER获得开始菜单目录,下面的例子说明了如何删除快捷方式:
!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk"
安装进度页面属性
MUI_INSTFILESPAGE_FINISHHEADER_TEXT text
显示安装进度页面头上的文字,但对于结束页面不是MUI_(UN)FINISHPAGE_NOAUTOCLOSE)不显示。
MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text
显示安装进度页面头上的,对MUI_INSTFILESPAGE_FINISHHEADER_TEXT的进一步说明。对于结束页面不是MUI_(UN)FINISHPAGE_NOAUTOCLOSE)不显示。
MUI_INSTFILESPAGE_ABORTHEADER_TEXT text
显示安装进度页面头上的表示安装过程非正常终止的文字
MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text
对MUI_INSTFILESPAGE_ABORTHEADER_TEXT的进一步描述
完成页面属性
在完成页面中可以运行程序,打开文件或网站。
MUI_FINISHPAGE_TITLE title
页面标题
MUI_FINISHPAGE_TITLE_3LINES
页面标题区的额外空格
MUI_FINISHPAGE_TEXT text
显示在完成页面上文字,用\r\n换行
MUI_FINISHPAGE_TEXT_LARGE
如果使用了 checkbox 时,需要设定的文本区的额外空间
MUI_FINISHPAGE_BUTTON text
完成按钮的显示文字
MUI_FINISHPAGE_TEXT_REBOOT text
重启操作系统 checkbox 旁的文字,用\r\n换行
MUI_FINISHPAGE_TEXT_REBOOTNOW text
显示在‘Reboot now‘旁的文字
MUI_FINISHPAGE_TEXT_REBOOTLATER text
显示在‘Reboot later‘旁的文字
MUI_FINISHPAGE_RUN exe_file
指定用户可以用 checkbox 选择运行的应用程序,如果有空格无需引用。
MUI_FINISHPAGE_RUN_TEXT text
运行应用程序 checkbox 旁的文字
MUI_FINISHPAGE_RUN_PARAMETERS parameters
运行应用程序的参数,需要用$\"表示双引号
MUI_FINISHPAGE_RUN_NOTCHECKED
指定运行应用程序 checkbox 为非选中状态
MUI_FINISHPAGE_RUN_FUNCTION function_name
指定安装完成后要执行的nsi函数,在该函数中可以运行多个应用程序。
MUI_FINISHPAGE_SHOWREADME file/url
指定用户可以用 checkbox 选择是否查看的文件或网站,如果有空格无需引用。
MUI_FINISHPAGE_SHOWREADME_TEXT text
指定 ‘Show Readme‘ checkbox 旁的显示文字
MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
指定 ‘Show Readme‘ checkbox 为非选中状态
MUI_FINISHPAGE_SHOWREADME_FUNCTION function_name
指定安装完成后要执行的 nsis 函数,在该函数中可以显示多个文件或网站。
MUI_FINISHPAGE_LINK link_text
用户可及点击的超链上的文字
MUI_FINISHPAGE_LINK_LOCATION file/url
指定用户是否可以用超链查看网站,如果有空格无需引用。
MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal)
超链上文字的颜色,默认为 000080
MUI_FINISHPAGE_NOREBOOTSUPPORT
禁用重启操作系统的功能
卸载确认页面属性
MUI_UNCONFIRMPAGE_TEXT_TOP text
显示在页面顶部的文字
MUI_UNCONFIRMPAGE_TEXT_LOCATION text
显示在 uninstall location 旁的文字

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的源代码,加上需要的选项。
(完了)

NSIS 2.0界面快速入门,,

NSIS 2.0界面快速入门


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
小样2502857665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有