nsis打包

久未见 提交于 2019-12-04 06:13:22

 

[全部展开]   [全部折叠]

介绍

NSIS 2 能够使你更容易地创建自定义用户界面的安装程序. Modern UI (新式用户界面) 提供的界面样式与最近版本的 Windows 所使用的向导的界面样式很相似.

它包括 NSIS 所有的标准页面 (如 组件选择页面、安装目录选择页面) 以及一些扩展页面。你可以在欢迎页面上提供一些安装相关的介绍, 在完成页面上提供一些选项, 允许用户选择在安装程序关闭时执行。(例如, 应用程序是否立即执行)。你也可以在完成页面为用户提供是否重启系统的选项。

 屏幕截图

Modern UI 2.0

新版让自定义页面变得更加容易, 因为  更改 NSIS 的标准页面与 MUI 的扩展页面的方法是一样的。现在还可以用其它的 NSIS 插件来为 MUI 添加新页面。你很快就可以看到这类例子。

欢迎和完成页面不再需要 InstallOptions - 它已经被新的 nsDialogs 插件代替。你可以在直接脚本中用 nsDialogs 创建自定义页面、个性化内置的页面。

要升级 Modern UI 1.8 的脚本, 你需要这样处理:

  • 插入 MUI2.nsh 头文件代替 MUI.nsh。
  • 与 InstallOptions 相关的宏, 已经被分离在一个与 MUI 无关的独立的头文件中。如果你仍然用 InstallOptions 做自定义页面, 你需要插入 InstallOptions.nsh, 并用 INSTALLOPTIONS_* 替代之前的 MUI_INSTALLOPTIONS_* 宏。这些宏的功用还是和原来的一样。
  • 你需要重写自己的个性化代码, 用 nsDialogs 的指令代替 Modern UI 1.8 欢迎与完成页面中所用的 InstallOptions INI 文件 。
  • 在所有的文本中, 用 NSIS 固有的方法规避一些特殊字符。例如, $\r$\n 新建一行。

脚本头部

Modern UI 的有关设置应该在脚本文件的开头部分插入。遵守如下的顺序是很重要的, 例如, 应当在插入 "页面宏" 之前设置 "界面设置", 页面的界面设置将会应用于某一类型的所有页面。看看 范例脚本 对你在实际脚本的中应该如何处理这些, 会很有帮助。

参数需要指定为这样的格式: 必须项 (选项1 | 选项2) [可选项]

1. 头文件

首先, 在脚本的开头添加此行来引入 Modern UI:

!include MUI2.nsh

2. 界面设置

然后, 你可能需要通过界面设置来更改安装程序的外观。下面这些设置会在所有的页面中生效。

NSIS 编译器内部提供的界面设置 (如 LicenseText, Icon, CheckBitmap, InstallColors) , 不应该再用在 Modern UI 代码中,因为 Modern UI 提供了这些设置的默认或扩展的版本。

范例:

!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
!define MUI_UI "myUI.exe" ;Value
!define MUI_INSTFILESPAGE_COLORS "FFFFFF 000000" ;Two colors

 界面设置

 常规界面设置

MUI_ICON icon_file
安装程序的图标.
默认: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico

MUI_UNICON icon_file
卸载程序的图标.
默认: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico

MUI_HEADERIMAGE
一张显示于页眉的图像.

MUI_HEADERIMAGE_BITMAP bmp_file
显示于安装程序页眉的位图 (推荐尺寸: 150x57 象素).
默认: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp

MUI_HEADERIMAGE_BITMAP_NOSTRETCH
不拉伸安装程序的页眉图像. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

MUI_HEADERIMAGE_BITMAP_RTL bmp_file
当使用 RTL 语言时, 将会显示于安装程序的页面页眉的位图. (推荐尺寸: 150x57 象素).
默认: 非 RTL 位图

MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH
当使用 RTL 语言适应区域尺寸时, 不拉伸安装程序的页眉图像. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

MUI_HEADERIMAGE_UNBITMAP bmp_file
显示于卸载程序页眉的位图 (推荐尺寸: 150x57 象素).
默认: 安装程序页眉位图

MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH
不拉伸卸载程序的页眉图像. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

MUI_HEADERIMAGE_UNBITMAP_RTL bmp_file
当使用 RTL 语言时, 将会显示于卸载程序的页面页眉的位图. (推荐尺寸: 150x57 象素).
默认: 安装程序 RTL 页眉位图

MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH
当使用 RTL 语言适应区域尺寸时, 不拉伸卸载程序的页眉图像. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

MUI_HEADERIMAGE_RIGHT
令本应显示于左边的页眉图像显示于右面(当使用 RTL 语言时, 它将会显示于左边而不显示于右边).

MUI_BGCOLOR (color: RRGGBBR hexadecimal)
页眉, 欢迎页面和完成页面的背景颜色.
默认: FFFFFF

MUI_HEADER_TRANSPARENT_TEXT
为页眉的 label 控件设置一个透明的背景. 在自定义页面设置了一幅大的页眉图片时有用.

 界面资源设置

MUI_UI ui_file
对话资源的界面文件. 如果你要定制你自己的用户界面, 请更改这里.
默认: ${NSISDIR}\Contrib\UIs\modern.exe

MUI_UI_HEADERIMAGE ui_file
包含一个位图控件以及置放页眉位图空间的对话资源 IDD_INST 的界面文件.
默认: ${NSISDIR}\Contrib\UIs\modern_headerbmp.exe

MUI_UI_HEADERIMAGE_RIGHT ui_file
包含一个位图控件以及在右边置放页眉位图空间的对话资源 IDD_INST 的界面文件.
默认: ${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe

MUI_UI_COMPONENTSPAGE_SMALLDESC ui_file
包含有一个较小描述区域的自定义对话资源 IDD_SELCOM 的界面文件.
默认: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe

MUI_UI_COMPONENTSPAGE_NODESC ui_file
包含一个没有描述区域的自定义对话资源 IDD_SELCOM 的界面文件.
默认: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe

 欢迎/完成页面 界面设置

MUI_WELCOMEFINISHPAGE_BITMAP bmp_file
用于欢迎页面和完成页面的位图. (推荐尺寸: 164x314 象素).
默认: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
不拉伸用于欢迎页面和完成页面的位图. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

 卸载程序的欢迎/完成页面设置

MUI_UNWELCOMEFINISHPAGE_BITMAP bmp_file
用于欢迎页面和完成页面的位图. (推荐尺寸: 164x314 象素).
默认: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
不拉伸用于欢迎页面和完成页面的位图. 只有当你要使用一张不需占用整个空白区域的图像时, 才使用这个选项. 如果你使用了一张匹配推荐尺寸的位图, 则不需使用这个选项, 因为如果用户使用了自定义的 DPI 设置, 那么其置放位图的区域尺寸会有所不同.

 License page

MUI_LICENSEPAGE_BGCOLOR (/windows | /grey | (color: RRGGBB hexadecimal))
许可文本框的背景颜色. /windows 用于 Windows 的文本背景颜色 (通常为白色). /grey 用于 Window 的背景颜色 (通常为灰色).
默认: /windows

 组件页面 界面设置

MUI_COMPONENTSPAGE_CHECKBITMAP bitmap_file
用于组件树形视图的构选框的位图.
默认: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp

MUI_COMPONENTSPAGE_SMALLDESC
较小的页面底部的描述区域. 如果你有许多区段且不需较多的描述, 请使用这个选项.

MUI_COMPONENTSPAGE_NODESC
不需描述区域.

 安装目录选择页面 界面设置

MUI_DIRECTORYPAGE_BGCOLOR (color: RRGGBB hexadecimal)
目录文本框的背景色.

 开始菜单文件夹页面 界面设置

MUI_STARTMENUPAGE_BGCOLOR (color: RRGGBB hexadecimal)
开始菜单目录列表和文本框的背景色.

 安装页面 界面设置

MUI_INSTFILESPAGE_COLORS (/windows | "(foreground color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal)")
详细信息显示屏的颜色. /windows 用于默认的 Windows 颜色.
默认: /windows

MUI_INSTFILESPAGE_PROGRESSBAR ("" | colored | smooth)
进度条的样式. Colored 能令它使用 MUI_INSTALLCOLORS.
默认: smooth

 安装程序完成页面 界面设置

MUI_FINISHPAGE_NOAUTOCLOSE
不自动跳到完成页面, 允许用户检查安装记录.

 卸载程序完成页面 界面设置

MUI_UNFINISHPAGE_NOAUTOCLOSE
不自动跳到完成页面, 允许用户检查卸载记录.

 安装程序终止警告 设置

MUI_ABORTWARNING
当用户要关闭安装程序时, 显示一个警告消息框.

MUI_ABORTWARNING_TEXT text
显示于终止警告消息框的文本.

MUI_ABORTWARNING_CANCEL_DEFAULT
设置"取消"按钮为触发该事件时的默认按钮.

 卸载程序终止警告 设置

MUI_UNABORTWARNING
当用户要关闭卸载程序时, 显示一个警告消息框.

MUI_UNABORTWARNING_TEXT text
显示于终止警告消息框的文本.

MUI_UNABORTWARNING_CANCEL_DEFAULT
设置"取消"按钮为触发该事件时的默认按钮.

3. 页面

插入以下宏可以设置你要使用的页面. 这些页面将会按你在脚本中插入的顺序出现. 你也可以在这些宏之间插入自定义的页面命令以添加自定义页面.

你可以按特定类型添加多个页面 (例如, 如果你想让用户指定多个文件夹).

范例:

!insertmacro MUI_PAGE_LICENSE "License.rtf"
!insertmacro MUI_PAGE_COMPONENTS

Var StartMenuFolder
!insertmacro MUI_PAGE_STARTMENU "应用程序" $StartMenuFolder

当你使用 "Start Menu Folder" 宏时, 你将需要 "Start Menu Folder" 页面的页面 ID. "Start Menu Folder" 将会被保存于指定的变量中.

安装程序页面
MUI_PAGE_WELCOME
MUI_PAGE_LICENSE textfile
MUI_PAGE_COMPONENTS
MUI_PAGE_DIRECTORY
MUI_PAGE_STARTMENU pageid variable
MUI_PAGE_INSTFILES
MUI_PAGE_FINISH

卸载程序页面
MUI_UNPAGE_WELCOME
MUI_UNPAGE_CONFIRM
MUI_UNPAGE_LICENSE textfile
MUI_UNPAGE_COMPONENTS
MUI_UNPAGE_DIRECTORY
MUI_UNPAGE_INSTFILES
MUI_UNPAGE_FINISH

 页面设置

页面设置应用于单个页面且应在插入一个宏之前设置. 如果你有一种类型的多个页面, 并且你想要为它们全体作同一个设置, 那么请在每个页面宏之前进行设置. 范例:

;添加一个让用户指定插件文件夹的目录页面
;将此文件夹路径存于 $PLUGINS_FOLDER

Var PLUGINS_FOLDER
!define MUI_DIRECTORYPAGE_VARIABLE $PluginsFolder
!insertmacro MUI_PAGE_DIRECTORY

 

用户界面中所有的标准文字都是由语言文件中载入的, 它们对 NSIS 所支持的所有语言中都有效。因此如果需要进行更改,你仅需要重新定义它们就可以了。

如果某参数是文字的,并且在各语言中并不一样,用 LangString 定义 "语言字符串",并用 $(LangStringName) 作为它的值. 至于在多语言中的许可文本,则用 LicenseLangString 。查阅 NSIS 用户手册可得到有关多语言安装程序的更详细的内容。

在所有的文本设置中,双引号 (") 应该做这样的处理避免错误: $\"

 常规页面设置

MUI_PAGE_HEADER_TEXT text
显示于页面页眉的文本.

MUI_PAGE_HEADER_SUBTEXT text
显示于页面页眉的旁白.

 欢迎页面设置

MUI_WELCOMEPAGE_TITLE title
显示于页面顶部的标题.

MUI_WELCOMEPAGE_TITLE_3LINES
标题区域的额外空区.

MUI_WELCOMEPAGE_TEXT text
显示于页面的文本. 用 \r\n 换行.

 许可页面设置

MUI_LICENSEPAGE_TEXT_TOP text
显示于页面顶部的文本.

MUI_LICENSEPAGE_TEXT_BOTTOM text
显示于页面底部的文本.

MUI_LICENSEPAGE_BUTTON button_text
显示于 '我同意' 按钮的文本.

MUI_LICENSEPAGE_CHECKBOX
显示一个用于用户选中同意许可条款的复选框.

MUI_LICENSEPAGE_CHECKBOX_TEXT text
显示在一个用于用户选中同意许可条款的复选框旁的文本.

MUI_LICENSEPAGE_RADIOBUTTONS
显示两个用于用户是否接受许可条款的单选按钮.

MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text
显示在用于用户接受许可条款的单选按钮旁的文本.

MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text
显示在用于用户拒绝许可条款的单选按钮旁的文本.

 组件页面设置

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
当一个文件夹无效时, 不禁用 "下一步" 按钮, 但是允许你使用 GetInstDirError 函数以操作一个无效的文件夹.

 开始菜单文件夹页面设置

MUI_STARTMENUPAGE_TEXT_TOP text
显示于页面顶部的文本.

MUI_STARTMENUPAGE_TEXT_CHECKBOX text
显示于 "禁止创建开始菜单文件夹" 复选框旁的文本.

MUI_STARTMENUPAGE_DEFAULTFOLDER folder
默认开始菜单文件夹.

MUI_STARTMENUPAGE_NODISABLE
不显示 "禁止创建开始菜单文件夹" 复选框.

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_(UN)FINISHPAGE_NOAUTOCLOSE 的完成页面时, 将不会显示这些文本).

MUI_INSTFILESPAGE_ABORTHEADER_TEXT text
当安装被终止后, 显示于此安装页面页眉的文本.

MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text
当安装被终止后, 显示于此安装页面页眉的旁白.

 完成页面设置

MUI_FINISHPAGE_TITLE title
显示于页面顶部的标题.

MUI_FINISHPAGE_TITLE_3LINES
标题区域的额外空区.

MUI_FINISHPAGE_TEXT text
显示于此页面的文本. 用 \r\n 换行.

MUI_FINISHPAGE_TEXT_LARGE
文本区域的额外空区 (如果使用了复选框).

MUI_FINISHPAGE_BUTTON text
显示于 "完成" 按钮的文本.

MUI_FINISHPAGE_CANCEL_ENABLED
启用 "取消" 按钮,用户可以点击跳过完成页面显示的任何选项.

MUI_FINISHPAGE_TEXT_REBOOT text
当询问是否重启时, 显示于完成页面的文本. 用 \r\n 换行.

MUI_FINISHPAGE_TEXT_REBOOTNOW text
显示在 "现在重启" 选择按钮旁的文本.

MUI_FINISHPAGE_TEXT_REBOOTLATER text
显示在 "以后重启" 选择按钮旁的文本.

MUI_FINISHPAGE_REBOOTLATER_DEFAULT
设置 "以后重启" 作为默认选项.

MUI_FINISHPAGE_RUN exe_file
可以通过复选框决定是否运行的应用程序. 当文件名中有空格时, 你不需用引号将其括起来.

MUI_FINISHPAGE_RUN_TEXT text
显示在 "运行程序" 复选框旁的文本.

MUI_FINISHPAGE_RUN_PARAMETERS parameters
运行应用程序所需的参数. 不要在值中直接使用双引号 (用 $\").

MUI_FINISHPAGE_RUN_NOTCHECKED
默认不选中 '运行程序' 复选框

MUI_FINISHPAGE_RUN_FUNCTION function
用调用一个函数替代执行一个应用程序 (定义 MUI_FINISHPAGE_RUN 而不用参数). 你可以用这个函数执行多个应用程序, 或者你可以更改此复选框的名称并用它做其它事情.

MUI_FINISHPAGE_SHOWREADME file/url
可以通过复选框决定是否查看的文件或网站. 当文件名中有空格时, 你不需用引号将其括起来.

MUI_FINISHPAGE_SHOWREADME_TEXT text
显示在 "显示自述" 复选框旁的文本.

MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
默认不选中 '显示自述' 复选框.

MUI_FINISHPAGE_SHOWREADME_FUNCTION function
用调用一个函数替代显示一个文件 (定义 MUI_FINISHPAGE_SHOWREADME 而不用参数). 你可以用这个函数显示多个文件, 或者你可以更改此复选框的名称并用它做其它事情.

MUI_FINISHPAGE_LINK link_text
一个用于用户点击查看一个网站或文件的链接的文本.

MUI_FINISHPAGE_LINK_LOCATION file/url
可以通过这个链接查看的网站或文件的位置. 当文件名中有空格时, 你不需用引号将其括起来.

MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal)
完成页面上的链接的文本颜色.
默认: 000080

MUI_FINISHPAGE_NOREBOOTSUPPORT
禁用支持此页面允许用户重新启动其系统. 如果不使用 /REBOOTOK 位标计或 SetRebootFlag, 那么定义此选项可以节省一些空间.

 卸载确认页面设置

MUI_UNCONFIRMPAGE_TEXT_TOP text
显示于页面顶部的文本.

MUI_UNCONFIRMPAGE_TEXT_LOCATION text
显示在卸载位置文本框旁的文本.

4. 语言文件

插入与你所要包含的语言相对应的 Modern UI 语言文件.

!insertmacro MUI_LANGUAGE "English"

Modern UI 语言文件会自动载入 NSIS 语言文件, 因此你不应使用 LoadLanguageFile.

5. 保留文件

如果你要使用固实压缩 (在默认情况下, 启用了 BZIP2 和 LZMA 的固实压缩), 那么很重要的一点是, 在执行init- 或页面函数时被提取的文件在数据块中的定位应先于其它文件, 因为这样会令你的安装程序运行地更快. 如果在你的区段中有文件命令, 或是在 init- 或页面函数之前有函数, 那么请在你的区段和函数之前添加类似如下的指令:

ReserveFile MyPlugin.dll
!insertmacro MUI_RESERVEFILE_LANGDLL ;语言选择对话框
...

页面相关的脚本代码

你可以在一些页面中显示一些附加的信息,或者获取用户的输入。你可以在此找到与此功能相关的脚本代码。

区段描述

在 MUI 的组件选择页面中,当用户将鼠标悬浮于一个区段时, 此区段的描述将会显示于此组件页面上. 如果你不想使用描述, 那么请使用 MUI_COMPONENTSPAGE_NODESC 界面设置.

若要为一个区段设置描述, 你必须向此区段命令添加一个附加参数, 此区段命令有一个用于应当包含此区段号码的定义的名称.

Section "区段名称 1" Section1
   ...
SectionEnd

在这些区段后, 通过这些宏设置描述:

LangString DESC_Section1 ${LANG_ENGLISH} "区段描述 1."
LangString DESC_Section2 ${LANG_ENGLISH} "区段描述 2."

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

对于卸载程序, 则应使用宏 MUI_UNFUNCTION_DESCRIPTION_BEGIN 和 MUI_UNFUNCTION_DESCRIPTION_END

开始菜单文件夹

将创建快捷方式的代码 (用 CreateShortcut 指令) 放在 MUI_STARTMENU_WRITE_BEGIN 和 MUI_STARTMENU_WRITE_END 之间:

!insertmacro MUI_STARTMENU_WRITE_BEGIN pageid
  ...创建快捷方式...
!insertmacro MUI_STARTMENU_WRITE_END

ID 应该是用户选择了用于创建快捷方式的文件夹的那个页面

包含了文件夹和页面 ID 的变量作为页面宏的参数.

语言选择对话框

如果你想令安装程序显示一个语言选择对话框 (请先看看范例 MultiLanguage.nsi ), 只需在.onInit 函数中插入 MUI_LANGDLL_DISPLAY 宏:

Function .onInit

  !insertmacro MUI_LANGDLL_DISPLAY

FunctionEnd

你也可以在卸载程序中使用这个宏, 只需将其插入 un.onInit 函数中.

 注册表储存语言首选项设置

若要记住用户的首选项, 你可以定义一个注册表项 注意: 这些定义应当在插入安装页面宏之前进行设置.

MUI_LANGDLL_REGISTRY_ROOT root
MUI_LANGDLL_REGISTRY_KEY key
MUI_LANGDLL_REGISTRY_VALUENAME value_name
此注册表项用于存放语言. 它记住用户的首选项. 你也可以将其用于卸载程序显示正确的语言. 不要在卸载时忘记移除此注册表项

对于卸载程序, 可以通过向 un.onInit 函数中插入宏 MUI_UNGETLANGUAGE 获取保存的语言首选项:

Function un.onInit

  !insertmacro MUI_UNGETLANGUAGE

FunctionEnd

 语言选择对话框界面设置

若要定制语言选择对话框界面, 请在插入宏 MUI_LANGDLL_DISPLAY 之前使用这些定义.

MUI_LANGDLL_WINDOWTITLE text
语言选择对话框的标题.

MUI_LANGDLL_INFO text
显示于语言选择对话框的文本.

MUI_LANGDLL_ALWAYSSHOW
总是显示语言选择对话框, 即使一种语言已经保存在了注册表中. 保存于注册表中的语言将会被默认选中.

MUI_LANGDLL_ALLLANGUAGES
总是显示所有可用语言,而不经过代码页过滤.

自定义页面

如果你想向你的安装程序中添加你自定义的页面, 你应当在页面宏之间添加你自己的页面命令.

!insertmacro MUI_PAGE_WELCOME
Page custom FunctionName ;自定义页面
!insertmacro MUI_PAGE_COMPONENTS
 
;卸载程序
!insertmacro MUI_UNPAGE_CONFIRM
UninstPage custom un.FunctionName ;自定义页面
!insertmacro MUI_UNPAGE_INSTFILES

在页面函数中使用宏 MUI_HEADER_TEXT 设置页面页眉的文字:

LangString PAGE_TITLE ${LANG_ENGLISH} "标题"
LangString PAGE_SUBTITLE ${LANG_ENGLISH} "旁白"

Function CustomPageFunction
  !insermacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
  ...
FuctionEnd

自定义 MUI 函数

NSIS 的界面函数如 .onGUIInit 函数以及页面函数,已经自动添加到了 MUI 中,并加入了新界面功能的代码。如果你想向由 Modern UI 插入的函数中添加你自己的代码 (例如 .onGUIInit 函数和页面函数), 以及创建你自己的函数并让 Modern UI 函数调用它们. 请用这些定义定义你的函数的名称.

范例:

!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit

Function myGUIInit
  ...你自己的代码...
FunctionEnd

MUI 页面可用自定义函数进行定制.

 常规自定义函数

应当在插入语言宏之前设置这些定义.

MUI_CUSTOMFUNCTION_GUIINIT function
MUI_CUSTOMFUNCTION_UNGUIINIT function
MUI_CUSTOMFUNCTION_ABORT function
MUI_CUSTOMFUNCTION_UNABORT function
MUI_CUSTOMFUNCTION_MOUSEOVERSECTION function
MUI_CUSTOMFUNCTION_UNMOUSEOVERSECTION function

 页面自定义函数

应当在插入一个页面宏之前设置这些定义.

MUI_PAGE_CUSTOMFUNCTION_PRE function
MUI_PAGE_CUSTOMFUNCTION_SHOW function
MUI_PAGE_CUSTOMFUNCTION_LEAVE function

"Pre" 函数最先调用,你可以在此函数中初始化变量,或者决定是否跳过 (用 Abort 指令) 当前的页面。然后,调用 "Show" 函数,你可以在此函数中定制界面。最后,用户的输入在 "Leave" 函数中生效。用户手册中提供了更详细的相关信息。

在 "Show" 函数中,当前页面中所有控件的窗口句柄 可从 MUI 中各自的变量中得到。目前这些变量名称还没有全部列出来,你只有通过查阅 MUI2 的源文件获取。所有的这些变量声明都在各自页面的头文件的开头部分。

范例

基本: Basic.nsi
欢迎/完成页面: WelcomeFinish.nsi
多种语言: MultiLanguage.nsi
页眉图像: HeaderBitmap.nsi
开始菜单文件夹页面: StartMenu.nsi

参与名单

由 Joost Verburg 制作.
由 Nikos Adamamas, aka adni18 进行图标设计.
感谢 Amir Szekely, aka KiCHiK, 由于他们的工作才令 NSIS 成为可能.

许可

zlib/libpng 许可将应用于 Modern UI.

 许可条款
版权所有 © 2002-2009 Joost Verburg

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute
it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; 
   you must not claim that you wrote the original software.
   If you use this software in a product, an acknowledgment in the
   product documentation would be appreciated but is not required.
2. Altered versions must be plainly marked as such,
   and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any distribution.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!