NSIS Script简介

NSIS Script是配置NSIS打包工具的基础,它使用类似脚本语言的语法规则。

1. 脚本文件格式

在NSIS脚本文件中每一行被称为一个命令(Command),命令的格式是 command [parameters],例如

File "myfile"

在NSIS脚本中使用分号(;)或者井号(#)作为行注释,也可以使用C语言中的注释 /* */来注释一块代码。

调用Plugin-in中函数的方式 plugin::command [parameters],例如:

nsExec::Exec "myfile"

当参数中包含数字时,可以使用十进制、十六进制(以0x开头)或者八进制(以0开头)表示,颜色RGB值使用类似html网页中颜色的表示方式(使用16进制数,但是不包含#号),例如:

IntCmp 1 0x1 1bl_equal
SetCtlColors $HWND CCCCCC ;CC是红色、绿色和蓝色成分

字符串使用引号表示,引号可以是单引号、双引号

变量使用$引用,变量的定义使用Var关键字,例如

Var MYVAR
StrCpy $MYVAR "myvalue"

2. NSIS脚本中的变量

NSIS脚本中的变量长度限定在1024个字符以内,所有的变量都是全局的,这些变量可以被用在区段和函数之中。

2.1 用户自定义变量

用户自定义变量使用Var命令来定义,当使用的时候使用$开头来引用它,所有被定义的变量都是全局变量(即使他们在函数和区段中被定义),在函数和区段中定义变量的时候需要加上 /GLOBAL 标签,在函数和区段之外定义没有这样的要求。

Var example

Function testVar
  Var /GLOBAL example2

  StrCpy $example "example value"
  StrCpy $example2 "another example value"
FunctionEnd

2.2 其他预定义变量

在NSIS脚本中预先定义了20个变量,它们是:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9
这些预先定义的变量可以被用于函数和区段,不需要定义,使用它们不会出现名字冲突。

INSTDIR INSTDIR一般会被StrCpy、ReadRegStr、ReadINIStr等函数修改,可以在.onInit函数中作一些检测以确定安装程序需要安装的位置)

$OUTDIR
当前输出的目录位置

$CMDLINE
安装包的命令行参数

$LANGUAGE
当前使用的语言,例如English是1033,可以在.onInit中修改

2.3 常量

PROGRAMFILES PROGRAMFILES32
PROGRAMFILES6464使 PROGRAMFILES64,它一般指向 c:\ProgramFIles

$DESKTOP 运行时解析的桌面位置,一般是 C:\Windows\Desktop

${NSISDIR}电脑上NSIS的安装目录,可以使用它来获取NSIS安装中的一些资源和UI等

3. 标签

在NSIS脚本中,经常会使用Goto来跳转程序的执行流程,在Goto使用中会需要标签。标签必须在区段或者函数中使用,标签在局部作用域中起作用(并非是全局的),定义标签的方式很简单:

MyLabel:

便定义好了一个标签,标签不能使用特殊符号和数字开头(-, +, !, $, or 0-9)在定义Label的时候以 .开头的Label是全局的Label,可以从任何函数或者区段中跳跃到该Label(但是不能从安装段跳跃到卸载段,反向也不行)

4. 相对跳转

使用Label的跳转是绝对的,即从某处跳转到Label指定的位置。除此之外NSIS脚本还支持相对跳转,可以跳跃一定的行数。使用 +2 +3 和 -2 -3 类似的风格跳转。

5. 页面

每一个NSIS脚本包含一系列的页面,这些页面可以是内置的页面(built-in Page),也可以是用户自定义的页面(通过nsDialogs或者InstallOptions定义的页面)

页面主要包括两种类型,Page定义的页面(出现在安装程序中)以及 UninstPage(出现在卸载程序中),此外PageEx可以更灵活的配置页面出现的位置以及方式

5.1 顺序

页面出现的顺序与它们在脚本中的位置一致,例如

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

5.2 页面选项

License页面:

  • LicenseText
  • LicenseData
  • LicenseForceSelection

模块选择页面:

  • ComponentText
    安装位置页面:
  • DirText
  • DirVar
  • DirVerify
    卸载安装日志页面:
  • DetailsButtonText
  • CompletedText
    卸载确认页面:
  • DirVar
  • UninstallText
    此外每个页面的标题使用Caption来设置

5.3 页面回调函数

每一个内置的页面有三个回调函数:
pre-function
show-function
leave-function
自定义的页面只包含两个函数,其中有一个是必须的,该函数是你创建页面时候的回调函数,另一个回调函数是leave-function(和内置一样),下面是一个使用回调函数的示例:

 Page license skipLicense "" stayInLicense
 Page custom customPage "" ": custom page"
 Page instfiles

 Function skipLicense
   MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function stayInLicense
   MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function customPage
   GetTempFileName $R0
   File /oname=$R0 customPage.ini
   InstallOptions::dialog $R0
   Pop $R1
   StrCmp $R1 "cancel" done
   StrCmp $R1 "back" done
   StrCmp $R1 "success" done
   error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$\r$\n$R1"
   done:
 FunctionEnd

6. 页面的定义语法

Page :
自定义页面:
custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
内置页面:
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

UninstPage
自定义页面:
custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
内置页面:
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值