4.5 页面
每个 (非静默安装) NSIS 安装程序都有一个页面设置。每个页面可以是一个 NSIS 内建页面或者一个由用户函数 (看 InstallOptions 例子) 创建的自定义页面。
使用这些脚本你可以控制这些页面的次序、外观、作用。你可以略过页面、颜色绘为白色、强制用户停留在某个页面直到特定条件成立、显示一个说明文档页面、给输入显示一个自定义页面或者更多的功能。在这部分你将学到如何控制上面提到的功能。
关于页面有两个基本的命令,Page 和 UninstPage。前一个为添加一个页面到安装程序,后一个为添加一个页面到卸载程序。在他们两个命令的前面你可以用 PageEx 命令给他们添加一个页面且包括一些选项。PageEx 可以使你给添加的指定页面设置选项而不是使用 PageEx 之外设置的默认设置。
4.5.1 次序
页面的次序由 Page、UninstPage 和 PageEx 出现在脚本里的次序决定。例如:
Page license Page components Page directory Page instfiles UninstPage uninstConfirm UninstPage instfiles
该代码告诉 NSIS 第一个显示的是许可页面,然后是组件选择页面,然后是目录选择页面,最后是区段被执行的安装记录页面,就像老式的安装程序那样。卸载程序将首先显示卸载确认页面然后是卸载执行记录。
你可以把同一个页面类型多次指定。
由于需要向后兼容老的 NSIS 脚本,如果没有使用到安装程序页面命令,那么随后的这些安装程序页面将会被添加:许可 (如果指定了 LicenseText 和 LicenseData)、组件选择 (如果指定了 ComponentText 并且有一个以上非隐藏的区段)、目录选择 (如果指定了 DirText) 和安装记录。当没有使用到卸载程序页面命令,那么随后的卸载程序页面将会被添加:卸载确认页面 (如果指定了 UninstallText) 和卸载记录。不过这个方法是不赞成的,强烈推荐的是把脚本转换为使用页面命令,因为你可以使用新的标准语言字串。
4.5.2 页面选项
每个页面都有它自己唯一的数据设置来定义外观和作用。这一段叙述了每种页面使用的数据和怎么样来设置。回调函数将在下一部分说明而不在本段处理。
下面的这个列表列出了某个页面类型受什么样的命令影响。除非特别提及,否则这些命令都可以在 PageEx 区块内外使用。如果在一个 PageEx 区块内部使用那么他们仅仅对由 PageEx 设置的当前页面产生影响,否则他们将被设为其他所有页面的默认值。
许可页面
组件选择页面
目录选择页面
卸载、安装记录页面
卸载确认页面
- DirVar - 仅能在 PageEx 里使用
- UninstallText
要设置页面标题请使用 Caption。
4.5.3 回调
每个内建的页面都有三个回调函数。一个预置函数、一个显示创建函数和一个离开函数。预置函数在页面被创建之前被直接的调用,显示函数在页面被创建后且在显示之前被直接调用,离开函数在用户按下下一页按钮之后并且在页面离开之前被直接调用。
- 预置函数允许你使用 Abort 来跳过该页面。
- 显示函数允许你使用 CreateFont、SetCtlColors、SendMessage 和其他来调整页面的用户界面。
- 离开函数允许你使用 Abort 来强制用户停留在当前页面。
一个自定义的页面仅有两个回调函数,一个是必须的创建页面,另一个离开函数的作用就和内建页面的离开函数一样。
举例:
Page license skipLicense "" stayInLicense Page custom customPage "" ":自定义页面" Page instfiles Function skipLicense MessageBox MB_YESNO "你想略过许可页面吗?" IDNO no Abort no: FunctionEnd Function stayInLicense MessageBox MB_YESNO "你想停留在许可页面吗?" IDNO no Abort no: FunctionEnd Function customPage GetTempFileName $R0 File /oname=$R0 customPage.ini InstallOptions::dialog $R0 Pop $R1 StrCmp $R1 "cancel" done StrCmp $R1 "back" done StrCmp $R1 "success" done error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions 错误:$\r$\n$R1" done: FunctionEnd
4.5.4 Page
custom [创建函数] [离开函数] [标题] [/ENABLECANCEL] 或 内置的页面类型 [预置函数] [显示函数] [离开函数] [/ENABLECANCEL]
要添加一个安装程序页面,请看上面关于相对于自定义页面的内建页面和关于回调函数的段。
内置的页面类型:
- license - 许可协议页面
- components - 组件选择页面
- directory - 安装目录选择页面
- instfiles - 安装执行页面
- uninstConfirm - 卸载确认页面
最后一个页面的取消按钮会被禁用来防止混乱。要允许这种行为请使用 /ENABLECANCEL。
4.5.5 UninstPage
custom [创建函数] [离开函数] [标题] [/ENABLECANCEL] 或 内置的页面类型 [预置函数] [显示函数] [离开函数] [/ENABLECANCEL]
要添加一个卸载程序页面,请看上面关于相对于自定义页面的内建页面和关于回调函数的段。
内置的页面类型请参考 Page。
4.5.6 PageEx
[un.](custom|uninstConfirm|license|components|directory|instfiles)
添加一个安装程序页面或一个卸载程序页面 (如果使用了 un. 前缀)。每一个 PageEx 必须和 PageExEnd 配合使用。在一个 PageEx 区块你可以对这个页面进行特殊的设置,这些设置不会被其他页面使用。没有被设置的选项将使用 PageEx 外部区块的的设置或者当什么都没有指定时使用默认设置。要对页面设置子标题使用 Caption 或 SubCaption。要对一个使用 PageEx 的页面设置回调函数请使用 PageCallbacks。请看上面关于相对于自定义页面的内建页面的段。
使用举例:
PageEx license LicenseText "说明" LicenseData readme.rtf PageExEnd PageEx license LicenseData license.txt LicenseForceSelection checkbox PageExEnd
4.5.7 PageExEnd
结束一个 PageEx 区块。
4.5.8 PageCallbacks
([创建函数] [离开函数]) | ([预置函数] [显示函数] [离开函数])
对一个使用 PageEx 定义的页面设置回调函数,仅能在 PageEx 区块里使用。请看上面关于回调函数的段。
PageEx license PageCallbacks licensePre licenseShow licenseLeave PageExEnd