NSIS学习笔记

研究electron,发现electron-build最终使用的是nsis,所以顺便学了下nsis,同时发现了一片大佬的文档,并在此大佬的基础上做了总结,只对基础知识做了总结,大佬还提供了一个例子,非常优秀。

原文链接:https://juejin.cn/post/7004398823082557476
中文文档:https

文章目录

  • 1.概述
  • 2.特性
  • 3.安装
  • 4.脚本格式
  • 5.脚本结构
    • 5.1安装程序属性
    • 5.2页面
    • 5.3区段
    • 5.4函数
      • 5.4.1调用自定义函数
  • 6变量和常量
    • 6.1转义符号
    • 6.2常量
      • 6.2.1自定义常量
      • 6.2.2获取常量
      • 6.2.3系统常量
    • 6.3变量
      • 6.3.1变量定义
      • 6.3.2变量赋值
      • 6.3.3变量获取
  • 6.逻辑语法
    • 6.1StrCmp(字符串判断)
    • 6.2StrCmpS(字符串忽略大小写判断)
    • 6.3Goto(逻辑跳转)
  • ********************常见问题***************************************
    • 中文乱码

1.概述

NSIS 是开发者用来创建安装程序的工具 ,它允许程序员控制安装、卸载、设置系统设置、解压文件等,且是最小的安装程序系统,在默认情况下仅为34KB。
需要注意的是:在 NSIS 脚本里每一行都作为一个命令处理, 如果这一行太长的话你可以使用 “\” 来分隔,编译器会自动地把下一行接到上一行来作为完整的一行,而不是看作新的行,如果在字符串里需要使用双引号,你应该使用 $" 来避免误解

2.特性

  • 脚本化,支持多文件的代码组织
  • 注册表编辑、执行脚本、修改环境变量
  • 较小的安装压缩大小
  • 较为美观的界面,还支持自定义界面
  • 插件系统
  • 支持网络安装
  • 支持做补丁安装

3.安装

  • 官网下载:https://nsis.sourceforge.io/Download
  • 安装:一直next就行
  • 环境变量配置:在系统变量Path中,配置你本地nsis的安装路径
  • 测试:重启后,输入nsis跳出nsis的页面,安装成功

4.脚本格式

脚本文件的默认扩展名是 .nsi ,头文件为 .nsh 。头文件可以通过把它划分为一个或多个代码块来帮助你编排脚本,你也可以在头文件里加入功能函数或宏,并且在多个安装程序里包含头文件,这样可以更容易的升级你的程序,并且使你的脚本很容易的让人看懂。要把一个头文件包含在你的脚本里你可以使用 !include 。这样就可以仅使用名字包含位于NSIS目录下的 Include文件夹 下的头文件。例如:!include Sections.nsh

5.脚本结构

一个 NSIS 脚本应该包括安装程序属性和区段、函数,但是必须包含OutFile属性。

5.1安装程序属性

安装程序属性确定你的安装程序的性能、外观和习惯,由这些属性你可以更改安装的时候显示的文本、安装类型,这些属性大多数在运行时被设定并且不能更改。

5.2页面

一个非静默安装程序(也就是需要安装的软件,非绿色版)需要向导来指导用户运行安装程序,可以通过Page或者PageEx来设置页面

5.3区段

在一个普通的安装包里用户需要安装许多东西。例如在 NSIS 发行安装程序里你可以选择安装源码、附加插件、脚本样例或其他。以上每个组件都有自己的一段代码。 当用户选择了安装该组件,那么安装程序就会执行对应的代码。在脚本里,这些代码称为区段。在组件页面里每个区段对应一个组件。区段名就是显示的组件名,如果组件被选中则区段代码将会被执行.你可以只使用一个区段来构建安装程序,但是如果你想要使用组件页来让用户选择可选的安装组件,你必须使用一个以上的区段。
卸载程序也可以有多个区段。卸载程序区段名前要加上前缀 ‘un.’ 。
例如:

Section "Installer Section"
SectionEnd
Section "un.Uninstaller Section"
SectionEnd

5.4函数

函数和区段类似,也包含了代码。区段和函数所不同的是他们被调用的形式。一共有两种函数类型:用户函数和回调函数。用户函数可以从一个区段里或另一个函数使用 Call 指令。用户函数不能直接执行而只能调用它。回调函数可以nsis在检测到某些时间发生后调用这些函数,就像vue的钩子函数。
例如:

Function .onInit
  MessageBox MB_YESNO "即将安装我的程序,要继续吗?" IDYES gogogo
    Abort
  gogogo:
FunctionEnd

5.4.1调用自定义函数

Call 函数名

6变量和常量

6.1转义符号

$,例如在字符串中使用变量,就要用$$符号,用来表示 $

6.2常量

6.2.1自定义常量

  • 语法:!define 常量名 常量值
  • 例如:!define NAME "名字"

6.2.2获取常量

  • 语法:$变量名或者${变量名},字符串中要使用$要使用$$

6.2.3系统常量

  • 已注册常量:$0-$9$R0-&R9
  • 其余常量

6.3变量

在nsis中,变量都是全局的,在区段和函数定义的变量必须使用/GLOBAL,例如Var /GLOBAL example2

6.3.1变量定义

Var 变量名

6.3.2变量赋值

nsis不能使用=来赋值,需要借助来实现,例如StrCpy $i "hello"

6.3.3变量获取

与常量的方式相同

6.逻辑语法

6.1StrCmp(字符串判断)

语法:字符串1 字符串2 相同时跳转的标记 [不相同时跳转的标记]

6.2StrCmpS(字符串忽略大小写判断)

语法:字符串1 字符串2 相同时跳转的标记 [不相同时跳转的标记]

6.3Goto(逻辑跳转)

语法:要跳转的标记 | +偏移| -偏移| 用户变量(目标地址)
Goto +1 跳转到下一条指令,Goto -1 跳转到上一条指令,等等。

常见问题*******************

中文乱码

额,nsis对中文支持的不是太好,所以需要使用一下命令来指定字符集合makensis /INPUTCHARSET UTF8 nsi文件路径,例如:makensis /INPUTCHARSET UTF8 .\installer1.nsi

你可能感兴趣的:(学习,笔记,数据库,nsis)