一、 脚本文件格式
一个 NSIS 脚本文件 (.nsi) 就是一个包含了脚本代码的文本文件。
命令
格式:'命令 [参数]'
例子:File "myfile"
注释
; 注释
# 注释
# 注释 \
另一个注释行 (查看本节下面的 `长命令`)
/*注释注释*/
Name /* 注释 */ mysetup
File "我的文件" ; 注释
插件
格式:插件::命令 [参数]'
例子:nsExec::Exec "我的文件"
数字
1.十进制 (数字) 或十六进制 (以 0x 开头的,比如: 0x12345AB), 或八进制 (以 0 开头且无 x)。
2.颜色被设置为十六进制 RGB 形式,像 HTML 那样但是没有 # 开头。
IntCmp 1 0x1 lbl_equal
SetCtlColors $HWND CCCCCC
字符串
1.要使用一个包含空格的字符串,需要用引号括起来: MessageBox MB_OK "Hi 您好!"
2.引号仅有的作用就是当他们开始时包含一个参数。他们可以是单引号、双引号或向后的单引号。
MessageBox MB_OK "I'll be happy" ; 把一个 ' 放在字符串里
MessageBox MB_OK 'And he said to me "Hi there!"' ; 把一个 " 放在字符串里
MessageBox MB_OK `And he said to me "I'll be happy!"` ; 这里把 ' 和 " 都放到了字符串里
MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man" ; 这里演示了跳过引号的解析
3.要在字符串里使用回车、换行、Tab 等,请使用 $\r, $\n, $\t 等。
变量
变量以 $ 开头。用户变量应该 (不是必须) 事先被声明并且区分大小写。
Var MYVAR
StrCpy $MYVAR "变量值"
长命令
要把命令扩充为多行,需要在行尾使用反斜杠 (\)
配置文件
如果在 NSIS 的配置目录下存在 "nsisconf.nsh" ,那么它里面的代码默认将会被包含在任何脚本里(除非你使用了 /NOCONFIG 命令参数)。(这个里面的一点不明白了,唉,)
二、 变量
所有的变量都是全局的并且可以用于区段和函数。需要注意的是,在默认情况下变量被限制在 1024 字节。要扩大这个限制你需要使用一个更大 NSIS_MAX_STRLEN 值并重新构建NSIS或者使用 特别版本。
用户变量
用户变量可以用 Var 命令来声明。你可以使用这些变量来保存值,用于字符串操作等等。
Var [/GLOBAL] 变量名
声明一个用户变量。变量名允许的字符: [a-z][A-Z][0-9] 和 '_'。 所有定义的变量都是全局的,即使在区段或函数内定义。 要使它表达更清楚一些,区段或函数内定义的变量必须使用 /GLOBAL 标记。在区段和函数之外不需要 /GLOBAL 标记。
Var example
Function testVar
Var /GLOBAL example2
StrCpy $example "example value"
StrCpy $example2 "another example value"
FunctionEnd
其他可写的变量
1.寄存器。这些变量可以像用户变量一样使用,但常用于公用函数或宏。你不需要声明这些变量,所以当你在公用代码里使用他们的时候不能有任何名字冲突。当在公用代码里使用这些变量的时候,推荐你使用堆栈保存和恢复他们原来的数据。这些变量也可以在插件里传递,因为他们可以被 DLL 插件读取和写入。
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9
2.安装目录。($INSTDIR 可以使用 StrCpy、 ReadRegStr、 ReadINIStr 等等来更改。例如在 .onInit 函数里可以用来做高级的检测安装定位)。
$INSTDIR
当前输出目录 。(通过 SetOutPath 或者通过 StrCpy、 ReadRegStr、 ReadINIStr 等等)
$OUTDIR
安装程序命令行。命令行的格式可以是下列之一:
-
- "完整路径\安装程序.exe" 参数1 参数2 参数3
- 安装程序.exe 参数1 参数2 参数3
- 对于解析“参数”部分,参阅下例。如果在命令行里指定了 /D= (用来跳过安装路径的选择),那么 /D= 后面的参数将不会被保存在 $CMDLINE (前面的可以保存)。
Section
${GetParameters} $R0;
$R0="[parameters]"
SectionEnd