当前位置: 首页 > 文档资料 > NSIS 用户手册 >

4.6 区段

优质
小牛编辑
132浏览
2023-12-01

每一个 NSIS 安装程序包含一个或多个区段。所有的这些区段都使用下面的这些命令来创建、修改和结束。

  • 每一个区段包含零个或多个指令。
  • 区段是安装程序执行的实体,并且如果设置了 ComponentText,那么用户就可以选择禁止或允许每一个可见的区段。
  • 如果一个区段名为 “Uninstall” 或以“un.”为前缀,那么它就是一个卸载程序区段。

4.6.1 区段命令

4.6.1.1 AddSize

大小_KB

告诉安装程序当前的区段需要一个额外的 “大小_KB” KB 磁盘空间。仅在一个区段里有效 (在区段外或函数里无效)。

Section
AddSize 500
SectionEnd

4.6.1.2 Section

[/o] [([!]|[-])区段名] [区段索引输出]

开始并且打开一个新的区段。如果区段名为空、遗漏或者以一个 - 开头,那么它将是一个隐藏的区段,用户也不能选择禁止它。如果一个区段名为“Uninstall”或以“un.”为前缀,那么它就是一个卸载程序区段。如果指定了区段索引输出,该参数将被定义 (!defined) 为区段索引 (然后可以对它使用 SectionSetText 等)。如果区段名以一个 ! 开头,那么该区段的显示名称将以粗体字显示。如果指定了 /o 开关,则该区段默认为不选。

Section "-隐藏区段"
SectionEnd
Section # 隐藏区段
SectionEnd
Section "!描黑区段"
SectionEnd
Section /o "可选区段"
SectionEnd
Section "某些安装" SEC_IDX
SectionEnd

4.6.1.3 SectionEnd

该命令关闭当前打开的区段。

4.6.1.4 SectionIn

安装类型索引 [安装类型索引] [RO]

该命令指定当前区段默认为哪一种安装类型 (详细信息看 InstType) 允许的状态入口。可以指定多个 SectionIn 命令 (它们会被组合起来)。如果指定 RO 作为一个参数,则该区段将被设为只读区段,意味着用户不能去改变它的状态。

InstType "完全"
InstType "最小化"
Section "区段 1"
SectionIn 1 2
SectionEnd
Section "区段 2"
SectionIn 1
SectionEnd

4.6.1.5 SectionGroup

[/e] 区段组名 [区段组名索引输出]

该命令插入一个区段组。区段组必须以 SectionGroupEnd 来关闭,并且可以包含一个或多个区段。如果区段组名称以一个 ! 开头,则区段组名称以粗体字显示。如果指定了 /e,该区段组的所有区段默认将被展开。如果指定区段组索引输出,该参数将被定义 (!defined) 为区段索引 (然后可以对它使用 SectionSetText 等)。如果名字以“un.”为前缀,则该区段组为卸载程序区段组。

SectionGroup "区段组"
Section "区段 1"
SectionEnd
Section "区段 2"
SectionEnd
SectionGroupEnd

4.6.1.6 SectionGroupEnd

关闭一个以 SectionGroup 打开的区段组。

4.6.2 卸载区段

一个特别的名为 “Uninstall” 的区段只能是被创建用于产生一个卸载程序。该区段应该用来从系统里移除由安装程序安装的所有文件、注册表健等等。这里有一个简单的卸载区段例子:

Section "Uninstall"
  Delete $INSTDIR\Uninst.exe ; 删除自己 (看下面的解释为什么可以这样)
  Delete $INSTDIR\myApp.exe
  RMDir $INSTDIR
  DeleteRegKey HKLM SOFTWARE\myApp
SectionEnd

第一个 Delete 指令是可以正常执行的 (删除卸载程序本身),因为执行卸载程序的时候它会复制一个副本到系统临时目录并执行副本来完成卸载。

需要注意的是在卸载程序的代码里,$INSTDIR 包含了卸载程序所在的位置。你不需要在安装程序里给该变量重复赋值。