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

NSIS使用笔记

拓拔霄
2023-12-01

NSIS 使用笔记

nsis是一个免费开源的Windows程序安装包生成工具。
nsis可以创建带安装、卸载、系统设置、文件提取等功能的安装包。
nsis采用脚本方式创建安装包,可以很方便的控制安装过程。

查看NSIS手册是最好的学习方式

nsis几个概念

nsis脚本包含的几个部分:

  • Attributes安装包信息(名称、公司等等)
  • Pages 安装向导页面
  • Sections/Functions

Installer Attributes 安装器的属性

Name
InstallDir
OutFile:生成的安装包文件存放位置,一个安装包至少包含一个section。

Pages 安装引导页面

非静态的安装包一定有一组安装向导页面,用于配置安装过程(例如设置安装路径)。
典型的页面设置如下:

# 许可协议
Page license
# 选择安装组件
Page components
# 设置安装路径
Page directory
# 显示最终要安装的组件
Page instfiles
# 确认卸载
UninstPage uninstConfirm
# 要卸载的组件
UninstPage instfiles

Sections 安装节/组件

每一个section都对应一个component。当改组件被选中后,将会执行对应section的脚本指令。

section的名字就是显示的component名字。

例如:

Section "My Program"
  SetOutPath $INSTDIR
  File ”MyProgram.exe“
  File "Readme.txt"
SectionEnd

Functions函数

function可以包含脚本代码,和section类似。function和section的区别是它们的调用方式不同。函数有两种类型,用户函数和回调函数。

用户函数通过Call指令调用;回调函数由安装器的特定事件触发。

普通函数、事件函数

格式:

Function func_name
# commands
FunctionEnd

函数名称格式:

  • 以”.“开头的函数通常是安装器的回调函数
  • 以”un.“开头的函数通常是在卸载时候被调用的回调函数
  • 普通函数不以"."、"un."开头,例如:”SayHello“

调用函数:

Call SayHello

回调函数

安装时的回调函数

  • .onGUIInit
  • .onInit
  • .onGUIEnd
  • .onRebootFailed
  • .onSelChange
  • .onUserAbort
  • .onVerifyInstDir

卸载时的回调函数

  • un.onGUIInit
  • un.onInit
  • un.onUninstFailed
  • un.onUninstSuccess
  • un.onGUIEnd
  • un.onRebootFailed
  • un.onSelChange
  • un.onUserAbort

脚本

逻辑代码结构

条件指令:

  • StrCmp
  • IntCmp
  • IfErrors
  • Goto

使用LogicLib(LogicLib.nsh)可以用很简单的宏构建复杂的逻辑结构。

使用LogicLib:

!include LogicLib.nsh

LoginLib中的指令:

  • ${If}
  • ${ElseIf}
  • ${Else}
  • ${EndIf}
  • ${Switch}
  • ${Case}
  • ${Default}
  • ${Break}
  • ${EndSwitch}
  • ${While}
  • ${EndWhile}
  • ${For}
  • ${Next}
  • ${Do}
  • ${LoopUntil}

变量

使用Var声明变量,变量都是全局变量。

声明并使用变量:

Var BLA ;Declare the variable
Section bla
  StrCpy $BLA "123" ;Now you can use the variable $BLA
SectionEndVar BLA ;Declare the variable

Stack 栈

Function bla
  # 入栈
  Push $R0
  # 出栈
  Pop $R0
FunctionEnd

调试脚本

通常可以使用MessageBoxes或DetailPrint输出调试日志。
也可以使用DumpState插件输出变量信息。
默认情况下,所有的安装行为都会输出到日志窗口。

运行脚本

当用户执行安装或卸载程序时,Page将以脚本中定义的顺序展示。当到达instfiles page,选中的组件的section的代码将以定义的顺序执行。如果没有展示component page,所有的section都会被执行。

编译器指令

定义编译时的常量(宏常量):!define

!define VERSION "1.0.3"
Name "My Program ${VERSION}"
OutFile "My Program Installer - ${VERSION}.exe"

定义宏代码块:macro
一次定义,多次复用。和c++中的宏类似,编译时时将代码插入引用的位置。

!macro MyFunc UN
Function ${UN}MyFunc
  Call ${UN}DoRegStuff
  ReadRegStr $0 HKLM Software\MyProgram key
  DetailPrint $0
FunctionEnd
!macroend

!insertmacro MyFunc ""
!insertmacro MyFunc "un."

跳转

在StrCmp或其他逻辑判断语句后需要跳转执行代码,例如:

# 1 $0==0则跳转至标签view
StrCmp $0 0 view
# 2 $R0==0不做任何处理,$R0!=0则跳转至之后的第3条指令
StrCmp $R0 0 0 +3

常用指令

常用指令:

  • SetOutPath 设置安装路径
  • File 提取指定文件
  • Call 调用用户函数
  • Abort 停止安装,并立即退出

常用变量和宏

 类似资料: