介绍NSIS 2 能够使你更容易地创建自定义用户界面的安装程序. Modern UI (新式用户界面) 提供的界面样式与最近版本的 Windows 所使用的向导的界面样式很相似. 它包括 NSIS 所有的标准页面 (如 组件选择页面、安装目录选择页面) 以及一些扩展页面。你可以在欢迎页面上提供一些安装相关的介绍, 在完成页面上提供一些选项, 允许用户选择在安装程序关闭时执行。(例如, 应用程序是否立即执行)。你也可以在完成页面为用户提供是否重启系统的选项。 屏幕截图Modern UI 2.0新版让自定义页面变得更加容易, 因为 更改 NSIS 的标准页面与 MUI 的扩展页面的方法是一样的。现在还可以用其它的 NSIS 插件来为 MUI 添加新页面。你很快就可以看到这类例子。 欢迎和完成页面不再需要 InstallOptions - 它已经被新的 nsDialogs 插件代替。你可以在直接脚本中用 nsDialogs 创建自定义页面、个性化内置的页面。 要升级 Modern UI 1.8 的脚本, 你需要这样处理:
脚本头部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 MUI_UNICON icon_file MUI_HEADERIMAGE MUI_HEADERIMAGE_BITMAP bmp_file MUI_HEADERIMAGE_BITMAP_NOSTRETCH MUI_HEADERIMAGE_BITMAP_RTL bmp_file MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH MUI_HEADERIMAGE_UNBITMAP bmp_file MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH MUI_HEADERIMAGE_UNBITMAP_RTL bmp_file MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH MUI_HEADERIMAGE_RIGHT MUI_BGCOLOR (color: RRGGBBR hexadecimal) MUI_HEADER_TRANSPARENT_TEXT MUI_UI ui_file MUI_UI_HEADERIMAGE ui_file MUI_UI_HEADERIMAGE_RIGHT ui_file MUI_UI_COMPONENTSPAGE_SMALLDESC ui_file MUI_UI_COMPONENTSPAGE_NODESC ui_file MUI_WELCOMEFINISHPAGE_BITMAP bmp_file MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH MUI_UNWELCOMEFINISHPAGE_BITMAP bmp_file MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH MUI_LICENSEPAGE_BGCOLOR (/windows | /grey | (color: RRGGBB hexadecimal)) MUI_COMPONENTSPAGE_CHECKBITMAP bitmap_file 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)") MUI_INSTFILESPAGE_PROGRESSBAR ("" | colored | 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" 将会被保存于指定的变量中. 安装程序页面 卸载程序页面 页面设置应用于单个页面且应在插入一个宏之前设置. 如果你有一种类型的多个页面, 并且你想要为它们全体作同一个设置, 那么请在每个页面宏之前进行设置. 范例: ;添加一个让用户指定插件文件夹的目录页面 ;将此文件夹路径存于 $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 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 MUI_DIRECTORYPAGE_VERIFYONLEAVE MUI_STARTMENUPAGE_TEXT_TOP text MUI_STARTMENUPAGE_TEXT_CHECKBOX text MUI_STARTMENUPAGE_DEFAULTFOLDER folder MUI_STARTMENUPAGE_NODISABLE MUI_STARTMENUPAGE_REGISTRY_ROOT root 对于卸载程序, 可以用宏 MUI_STARTMENU_GETFOLDER 获取开始菜单文件夹路径: !insertmacro MUI_STARTMENU_GETFOLDER page_id $R0 Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk" MUI_INSTFILESPAGE_FINISHHEADER_TEXT text MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text MUI_INSTFILESPAGE_ABORTHEADER_TEXT text MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text MUI_FINISHPAGE_TITLE title MUI_FINISHPAGE_TITLE_3LINES MUI_FINISHPAGE_TEXT text MUI_FINISHPAGE_TEXT_LARGE MUI_FINISHPAGE_BUTTON text MUI_FINISHPAGE_CANCEL_ENABLED MUI_FINISHPAGE_TEXT_REBOOT text 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_SHOWREADME file/url MUI_FINISHPAGE_SHOWREADME_TEXT text MUI_FINISHPAGE_SHOWREADME_NOTCHECKED MUI_FINISHPAGE_SHOWREADME_FUNCTION function MUI_FINISHPAGE_LINK link_text MUI_FINISHPAGE_LINK_LOCATION file/url MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal) MUI_FINISHPAGE_NOREBOOTSUPPORT 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 对于卸载程序, 可以通过向 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_PAGE_CUSTOMFUNCTION_PRE function "Pre" 函数最先调用,你可以在此函数中初始化变量,或者决定是否跳过 (用 Abort 指令) 当前的页面。然后,调用 "Show" 函数,你可以在此函数中定制界面。最后,用户的输入在 "Leave" 函数中生效。用户手册中提供了更详细的相关信息。 在 "Show" 函数中,当前页面中所有控件的窗口句柄 可从 MUI 中各自的变量中得到。目前这些变量名称还没有全部列出来,你只有通过查阅 MUI2 的源文件获取。所有的这些变量声明都在各自页面的头文件的开头部分。 范例基本: Basic.nsi 参与名单由 Joost Verburg 制作. 许可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. |