NSIS的Modern UI教程

来源 :http://hi.baidu.com/usemm/blog/item/28be0a4f72209d32aec3abcb.html
NSIS的Modern UI教程
2008-02-02 16:51

NSIS 2.0版本支持定制的用户界面。所谓的Modern
UI(下称MUI)就是一种模仿最新的Windows界面风格的界面系统。MUI改变了NSIS脚本的编写习惯,它使用NSIS的宏来表达,指定MUI的
属性需要使用宏。所以,诸如LicenseText, Icon, CheckBitmap, InstallColors在MUI中失去意义。
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
指定安装完成后要执行的nsi函数,在该函数中可以显示多个文件或网站。

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" or "Button".

"Label" 用来显示静态文本
"Text" and "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"控件的文件过滤器,模式如Text Files|*.txt|Programs|*.exe;*.com|All Files|*.*

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModernUI(http://mui.codeplex.com/)是一个开源的WPF界面库,利用该界面库,我们可以创建很酷的应用程序。下面是ModernUI官方示例,你可以从官方网站直接下载源码运行,如果是.NET 4.0的话,记得要声明“NET4”预编译变量,否则无法编译通过。 这个界面框架是基于ModernUI来实现的,在该文我将分享所有的源码,并详细描述如何基于ModernUI来构造一个非常通用的、插件化的WPF开发框架。下载源码的同志,希望点击一下推荐。 本文将按照以下四点来介绍: (1)ModernUI简介; (2)构建通用界面框架的思路; (3)基于ModernUI和OSGi.NET的插件化界面框架实现原理及源码分析; (4)其它更有趣的东西~~。 要编写这样的WPF界面,我们需要在一个Window上声明菜单和Tab页面,下图是定义菜单的声明。 此外,每一个Tab风格页面,你也需要手动的为菜单创建这样的界面元素。 直接用这样的方式来使用ModernUI,显然不太适合团队协作性的并行开发,因为在一个团队的协作中,不同的人需要完成不同的功能,实现不同页面,每个人都需要来更改主界面。 我非常希望模块化的开发方法,因为这可以尽可能的复用现有资产,使程序员可以聚焦在自己关注的业务逻辑上,不需要关心UI的使用。下面,我将来描述基于ModernUI实现的一个通用界面框架,这个界面框架允许程序员在自己的业务模块中配置需要显示的界面元素。 通用界面框架实现思路: 我希望能够实现这样的通用界面框架: (1)程序员可以直接实现需要展现业务逻辑的界面,不需要关注如何使用ModernUI; (2)程序员可以通过简单的配置就可以将自己实现的业务逻辑页面显示在主界面中; (3)这个界面框架可以完全复用。 当我看到ModernUI这个界面库时,我希望将应用程序做成模块化,每一个模块能够: (1)通过以下配置能够直接显示二级菜单。 (2)通过以下配置能够直接显示三级菜单。 这样做的好处是,开发插件的时候可以不需要关心界面框架插件;团队在协作开发应用的时候,可以独立开发并不需要修改主界面;团队成员的插件可以随时集成到这个主界面;当主界面无法满足我们的布局时或者用户需求无法满足时,可以直接替换主界面框架而不需要修改任何插件代码。
NSIS(Nullsoft Scriptable Install System)是一个开源的脚本驱动的安装制作工具,使用它可以用简单的脚本生成Windows操作系统下的安装程序。NSIS插件开发教程主要涉及如何开发自定义插件,以增强NSIS的功能。 首先,开发NSIS插件需要一些编程基础,特别是C或C++语言的基础知识。在开始插件开发之前,需要了解NSIS的插件架构和插件接口。 NSIS插件示例代码及其开发文档可以从NSIS官方网站或GitHub上获取。开发插件的第一步是创建一个空白的NSIS插件项目,然后配置编译环境,这通常涉及到配置编译器和相关的开发工具。 接下来,根据插件的需求,编写插件的代码。插件可以提供各种功能,例如添加自定义页面、执行特定的任务等。在开发插件时,需要按照NSIS的插件接口进行编程,以确保插件能够正确地与NSIS安装程序进行通信。 在完成插件代码的编写后,需要进行插件的编译和生成。这一步通常需要使用NSIS提供的编译工具,将插件源代码编译成可执行的插件文件。 最后,将生成的插件文件添加到NSIS安装程序中。在NSIS脚本中通过调用插件提供的函数或指令来使用插件的功能。可以根据需要在安装程序的不同阶段调用插件,实现自定义的功能扩展。 总之,NSIS插件开发教程需要具备一定的编程基础,并熟悉NSIS插件的架构和接口。通过编写插件代码、编译生成插件文件,并将插件添加到NSIS安装程序中,可以实现自定义功能的扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值