NSIS教程(1): 基础语法

10 篇文章 324 订阅 ¥19.90 ¥99.00
本文档详细介绍了NSIS安装脚本的基础语法和结构,包括环境搭建、脚本的基本元素如安装程序属性、页面(内置与自定义)、区段,以及NSIS的语法概览,涵盖常量、变量、函数、宏和指令的使用。通过学习,你可以掌握创建NSIS安装包的基本步骤和技巧。
摘要由CSDN通过智能技术生成

NSIS教程:
《NSIS用户手册 中文版》
《NSIS图文教程集锦 - 轻狂志》

一. 环境搭建

NSIS是“Nullsoft Scriptable Install System”的简称。从http://nsis.sourceforge.net/Download下载NSIS安装进行安装,安装完之后的目录结构如图:
这里写图片描述

也可以从此处下载:nsis-3.02.1

可以使用任意文本编辑器(推荐notepad++,带语法高亮)来开发NSIS脚本,然后使用makensisw.exe编译NSIS脚本,该工具只提供编译脚本的功能,不能对脚本进行调试。

二. NSIS脚本结构

一个NSIS脚本可以包括安装程序属性页面区段等。
对于一个最简单的NSIS脚本所必需的是OutFile属性(该属性告诉NSIS编译生成的安装包可执行文件的输出路径)和一个区段,如:

OutFile "Simple.exe"

Section "Installer Section"
SectionEnd

保存上面脚本到*.nsi文件,并使用makensisw.exe打开编译,如图表示编译成功,成功之后会在脚本当前目录看到输出的Simple.exe;如果编译失败,makensisw.exe会在输出窗口提示失败原因。
这里写图片描述

2.1 安装程序属性

安装程序属性控制安装程序的外观、包括哪个页面出现在安装程序里、在每个页面的每个部分显示什么文本、安装程序的名称(如上面脚本中的OutFile)、使用什么样的图标、默认安装目录、取消什么样的文件等等。
安装程序属性可以在除了区段和函数以外的任何地方设置。
可以理解为安装程序属性是设置给NSIS编译器看的,这些属性值在编译时都已经确定了,所以除了InstallDir以外,其他安装程序属性都不允许使用变量(除了在字串中使用的$\r$\n)。

NSIS支持的完整安装程序属性见:《NSIS用户手册 中文版》 的4.8节。

2.2 页面

页面分为NSIS内置的向导页面用户自定义页面。 一个非静默安装程序需要页面来指导用户运行安装程序,可以通过Page命令或PageEx(PageEx提供了更多高级的设置)命令来设定哪个页面显示。
页面显示的顺序和它在NSIS脚本中定义的次序是一致的。

2.2.1 内置向导页面:

NSIS内置的向导页面有:

  • license:许可证页面。
  • components: 组件选择页面,每个可见的区段都可以作为一个组件给用户选择是否安装。你可以只使用一个区段来构建安装包,但是如果你想要使用组件页来让用户选择可选的组件,那你就需要使用多个区段。
  • directory: 安装目录选择页面。
  • instfiles: 安装过程页面。
  • uninstConfirm: 卸载确认页面。

不同的页面,有不同的属性。

内置页面语法如下:

Page (license|components|directory|instfiles|uninstConfirm) [预置函数] [显示函数] [离开函数]

每个内建的页面都有三个回调函数(预置函数、显示创建函数和离开函数),预置函数在页面被创建之前被直接的调用,显示函数在页面被创建后且在显示之前被直接调用,离开函数在用户按下下一页按钮之后并且在页面离开之前被直接调用。

如:

PageEx license
    LicenseData "license.rtf"       #可以是txt或rtf文件格式
PageExEnd
2.2.2 自定义页面

创建自定义页面语法:

page custom [创建函数] [离开函数] [标题]

自定义页面只有两个回调函数(创建函数和离开函数),创建函数在需要创建页面时被调用,离开函数在用户按下下一页按钮之后并且在页面离开之前被直接调用。

回调函数详见:《NSIS用户手册 中文版》 的4.5.3节。

2.3 区段(Section)

在安装包里用户需要安装许多东西,如安装源码、附加插件、脚本样例或其他。 里面的每个安装组件都有它自己的代码块,当用户选择了安装该组件,那么安装程序就会执行对应的代码。在NSIS脚本里,这些代码称为区段。每个可见的区段都可以作为一个组件给用户选择是否安装(区段也可以设置属性对用户隐藏,默认安装,让用户无法选择是否安装)。

NSIS脚本对区段的数量没有限制,你可以只使用一个区段来构建安装包,但是如果你想要使用组件页来让用户选择可选的组件,那你就需要使用多个区段了。

卸载程序也可以有多个区段,但卸载程序区段名前要加上前缀“un.”,因为卸载程序是要被编译成是一个单独的exe的,所以要对编译器指明哪些内容(如区段)需要被编译进卸载程序。

区段名为空、遗漏或者以一个 “-” 开头,那么它将是一个隐藏的区段,用户也不能在组件远程页面选择禁止它。

三. NSIS语法

3.1 语法概述

  • 单行注释用井号"#“或分号”;",跨行注释用可以用C/C++中注释语法;
  • 数字常量可以用十进制、十六进制(0x为前缀)、八进制(0为前缀)表示,颜色用类似html的中RGB表示法,但去井号"#"。
  • 字符串常量可以用引号引用,特殊的字符可以使用美元符号"$"作前缀来转义。美元符号、换行、回车、制表符都是特殊字符,需要转义,他们在NSIS中可以写成: $$, $\n, $r, $\t
  • NSIS脚本用行尾的反斜杠""表示下一行和当前行逻辑上是同一行。

3.2 常量和变量

NSIS对变量和常量都是全局的,且大小写敏感的,NSIS中变量和常量都是弱类型的。常用和变量的引用方式都是${VAR_NAME}$VAR_NAME
使用!define方式定义常量,如:!define PRODUCT_NAME "网易云音乐"
使用Var方式定义变量,如:Var a
NSIS内置了20个已注册的变量:$0 ~ $9$R0 ~ $R9,这些变量不需要声明就可以使用,一般用于参数传递等。
另外,NSIS内置一个堆栈,使用pushpop命令来入栈和出栈,可以使用堆栈来暂存数据。

关于变量的赋值,NSIS中不能直接使用=来赋值,需要借助StrCpy来实现,如:

StrCpy $0 "hello"
StrCpy $0 123

3.3 函数

  • 函数定义
Function 函数名

FunctionEnd

函数名以“.”开头的(例如 “.Whatever”)一般作为回调函数保留。
函数名以“un.”开头的函数将会被创建在卸载程序里。因此,普通安装区段和函数不能调用卸载函数,而卸载区段和卸载函数也不能调用普通函数。
NSIS函数声明中不支持参数定义,如果需要传递参数,可以使用内置的20个变量或者堆栈的方式。

  • 函数调用
Call 函数名

3.4 宏

除了函数之外,NSIS还支持定义,NSIS中的宏支持定义参数。

  • 宏定义
!macro 宏名 [参数1] [参数n]

!macroend
  • 宏调用
!insertmacro 宏名 [参数1] [参数n]

3.5 指令

NSIS内置了很多指令,这些指令提供了安装包常用了功能,如果这些指令无法满足需求,用户也可以自己开发插件。
NSIS支持的指令列表见:《NSIS用户手册 中文版》 的4.9节。

NSIS指令使用中比较特别的在于跳转,比如执行失败跳转到哪里,成功跳转到哪里。
MessageBox指令为例([]为可选项):

MessageBox 消息框选项列表 消息框文本 [/SD 返回] [检测返回值 跳转到] [检测返回值2 跳转到2]

下面的用法表示如果MessageBox返回IDYES,则+2,即跳转到该指令的下2条执行(+1该指令的下1条,+2就为该指令的下2条),/SD IDYES表示安装包采用静默安装方式时默认用户选择了IDYES:

MessageBox MB_ICONQUESTION|MB_YESNO "你确实要完全删除网易云音乐,及其所有组件吗?" /SD IDYES IDYES +2 IDNO +1

四. NSIS界面

NSIS提供的界面分为传统界面(Classic UI)、现代界面(Modern UI)。

4.1 传统界面

这里写图片描述

4.2 现代界面

这里写图片描述

4.3 自定义界面

我们可以使用第三方界面库(如duilib, Qt)自己绘制安装包的界面,这样灵活度更大。
在此之前需要掌握《NSIS教程(7): 开发第三方插件》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china_jeffery

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值