NSIS 脚本的工作方式

变量
你可以用 Var 命令来声明自己的变量($VARNAME)。 变量是全局的并且可以在任何区段或函数中使用。

声明并使用一个用户变量 :

Var BLA ;声明变量[code]
Section bla

StrCpy $BLA “123” ;现在你可以使用该变量 $BLA

SectionEnd[/code]另外堆栈可以用来作临时存储。 使用 Push 和 Pop 命令来访问堆栈。Push把一个值添加到堆栈,Pop 移除一个值并且设置该变量。

对于公共代码,这里有 20 个已注册的变量 (如 $0 和 $R0)。 这些静态的变量你不需要声明并且你不应使任何名字与之相冲突。 如果你想在公共代码里使用这些变量,你可以把原始的值存储在堆栈并随后恢复原始值。

在调用函数后,变量包含原来的值。需要注意使用多个变量时的次序(后进先出):[code]Function bla

Push $R0
Push $R1

...code...

Pop $R1
Pop $R0

FunctionEnd[/code]调试脚本
如果你要实现更多的功能那么你的脚本就会变得更复杂。这将会增加出错的可能性,特别是当你使用了很多变量的时候。以下将有可能会对你的脚本调试有所帮助。 使用MessageBoxes 或 DetailPrint 来显示变量内容。 对所有变量使用 Dumpstate 插件来勾画总体大纲。

默认情况下安装程序会把所有的操作显示在记录窗口上,你可以把记录的文本复制到剪贴板里(Ctrl+C 或使用鼠标右键的复制菜单),当然也有方法把它直接写到一个文件里,看 这里。

编译器命令
编译器命令会在你编译时在你的电脑上执行。他们可以用于条件编辑、包含头文件、运行一个应用程序、改变工作目录和更多。最常见的用法是定义,定义是编译时的常量,你可以定义你的产品版本号并在你的脚本里使用。例如:!define VERSION "1.0.3" Name "My Program ${VERSION}" OutFile "My Program Installer - ${VERSION}.exe"另一个常见的命令是宏。宏用于在编译时插入代码,依赖于定义并使用定义的值。一个关于宏的例子是 升级 DLL, 你可以用来升级一个 DLL 文件。宏的命令在编译时会插入。这样你只需要写一个通用的代码并只需要作为小的更改就可以多次的使用。例如:[code]!macro MyFunc UN
Function ${UN}MyFunc
Call ${UN}DoRegStuff
ReadRegStr $0 HKLM Software\MyProgram key
DetailPrint $0
FunctionEnd

!insertmacro MyFunc “”
!insertmacro MyFunc “un.”[/code]宏帮助你避免在安装部分和卸载部分写重复的代码。上面两个 !insertmacros 插入了两个函数,一个是 MyFunc 用于安装部分,另一个是 un.MyFunc 用于卸载部分,但他们做的是同一件事。