当前位置: 首页 > 工具软件 > NSIS > 使用案例 >

NSIS学习记录(三)————NSIS脚本简介

浦墨竹
2023-12-01


一、介绍

  1. 标题NSIS脚本是有特定语法规则的规范语言。
  2. 可以用任何文本编辑器进行编辑,推荐带有行号的编辑器——NSIS根据行号进行报错,有语法高亮的编辑器也推荐。可以从 NSIS Wiki上下载NSIS专属的编辑器

目前,我用的是 notepad++

  1. NSIS每行是一条指令,如果指令过长可以用 ’\‘ 进行换行
Messagebox MB_OK|MB_ICONINFORMATION \
"This is a sample that shows how to use line breaks for larger commands in NSIS scripts"
  1. 如果在字符串中要使用双引号,使用 $\" 进行转义,或者使用 ` 或 ’ 进行字符串的引用
  2. 脚本文件的默认拓展名是 .nsi,头文件的拓展名是 .nsh
    通过头文件可以将脚本文件中的代码划分为几块,可以在头文件中放置函数和宏,在安装程序中包含头文件。
    这使得更新变得更容易,脚本也更易阅读。
    在脚本中引用头文件使用的是 !include位于NSIS安装路径下Include目录中的头文件可以直接包含,例如:
!include Sections.nsh

二、脚本结构

一个NSIS脚本包括: Installer Attributes 、Page 、Sections 、Functions。可以用编译器进行编译时的操作。
OutFile指令是必备的,该指令指明安装程序的输出文件。
一个脚本文件中至少包含一个 Sections 。

Installer Attributes

决定了安装包的行为和外观,大部分命令运行时不可更改

Page

非静默安装有一系列的向导页,用于引导用户进行安装配置。通过 Page指令可以进行页面的展示,例如

Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

可以显示一个许可协议页面、安装组件的选择页面、安装路径的选择页面、在instfiles页安装所选的组件;卸载的时候会有一个确认页,然后再instfiles页进行卸载

Sections

通常,安装包有几个部分进行选择,例如NSIS的安装包中,可以选择附加工具、插件、实力等。不同的组件有各自的安装代码,依据用户选择安装的组件的不同,安装包执行相应的代码。
在脚本中,代码被定义在sections中,每个section对应于组件页上的一个组件,section的名称就是所显示组件的名称,当组件被选中(要被安装)时section中的代码将被执行,只有一个section页也可以构建安装包,但是要想允许用户选择要安装那些组件,就一定需要多个section
卸载程序也可以有多个section页,卸载程序以un.为前缀,例如:

Section "Installer Section"
SectionEnd

Section "un.Installer Section"
SectionEnd

section中使用的指令与installer attribute有很大的不同,它们是运行时在用户的电脑上执行的。这些指令可以提取文件,读写注册表、ini文件、和一般的文件,创建目录,创建快捷方式等。
SetOutPath是最基础的指令,它告诉安装包从哪提取文件、提取那些文件。例如

Section "myProgram"
	SetOutPath $INSTDIR
	File "My Program.exe"
	File "Readme.txt"
SectionEnd

Functions

function中也可以像section一样包含脚本代码。functionsection的区别在与调用方式的不同。function有两类,用户函数和回调函数。

用户函数由用户通过Call指令在section或其他函数中调用。用户函数只有在调用的时候才会被执行。在用户函数执行完毕之后会执行Call指令之后的其他命令,除非在用户函数中结束了安装包的运行。当有一系列指令要在多个位置被执行时用户函数是很好的选择,可以省掉代码拷贝的时间,并让代码变得简洁。(这点跟程序里函数是一样的)。

回调函数由安装包在某些已定义时间中调用,例如安装包启动时,回调是可选的。
例如,可以定义一个函数.onInit用于欢迎用户使用安装包。NSIS的编译器可以根据函数的名字将它识别为回调函数,并在安装包启动的时候调用。

Function .onInit
	MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
		Abort
	gogogo:
FunctionEnd

在回调函数中Abort具有特殊含义,在不同的回调函数中它的含义不同。在上述实例中它的含义的是停止初始化安装程序,并立即退出

 类似资料: