NSIS

第一章,概要

NSIS (Nullsoft 脚本安装系统,Nullsoft Scriptable Installation System)的缩写,它是一个开源免费的 Win32 安装、卸载、系统设置、解压文件系统。特点是脚本简洁高效(脚本支持变量、函数和字符串操作,可通过脚本控制安装的每一步。NSIS目前仍是最小的安装程序系统);系统开销小(默认选项下的编译后仅增加34KB大小)。 NSIS 2.37 简体中文增强版(20080616更新) NSIS官方WIKI NSIS Discussion 官方教程

第二章,NSIS基本语法

一,脚本语句

脚本的每一行都作为一个指令来编译。NSIS 用于脚本的这些指令稍微的近似于 PHP 和汇编。它们没有真正的高级语言结构。但是他们的指令(对于绝大部分)却是高级的,并且你可以很容易的掌握(比如你不用担心字串的连接等等)。基本上你有 25 个寄存器(20 个常规用途,5 个特殊用途),和一个堆栈。 如果一行太长,可以在行尾使用'\'来分行,编译器会自动地把下一行接到上一行来作为完整的一行,而不是看作新的行。如果在字串里需要使用双引号,你应该使用 $\” 来避免误解,或者使用另外的不引起歧义的引号比如 ` 或 '。 要注意脚本的可读性,在程序中选择合适的缩排、大小写风格,并在需要时将脚本分行 。 1,语句(简单语句)格式:命令 [参数] 如:File “我的文件” 2,注释语句:在命令后面添加 ; 或 # 的注释单行。可使用/* 和 */来添加注释块。 File “我的文件” ; 注释行1,一般在命令后面添加 Name ”#myfile” #注释行2,如果参数需要由分号或井号开头,你可以用双引号把它括起来。 # 注释行3-1 \ 注释行3-2 /* C语言风格的注释行4 C语言风格的注释行5 */ Name /* 嵌入语句的注释行 */ mysetup

二,脚本文件

一个 NSIS 脚本应该包括安装程序属性和区段、函数。你也可以使用编译器命令在编译的时候进行指定。所必需的是OutFile 指令(该命令告诉 NSIS 安装程序输出路径)和一个区段。 NSIS的语法很有点象高级语言如汇编、C。它非常注重先后顺序如“SetFont”指令必须在“AddBrandingImage”指令之前等。脚本进行合理的整体布局有利于日后的安装程序更新。一般脚本的布局是:预设参数(包括外部压缩器选择、编译选项、宏定义以及文件包含等) =⇒普通安装设置 =⇒自定义函数 =⇒安装程序区域内容 =⇒安装程序回调函数及其相关函数定义 =⇒卸载程序区域内容 =⇒卸载程序回调函数及其相关函数定义 1,安装包属性 Installer Attributes

2,页面 Pages 脚本结构

一个非静默安装程序需要向导页面来指导用户运行安装程序,你可以通过 Page 命令 (或更多高级设置如 PageEx )来设定哪个页面显示。一个典型的设置像这样:

Page license ;许可协议页面Page components ;安装的组件Page directory ;安装的目录Page instfiles ;选择的组件UninstPage uninstConfirm ;卸载确认页面UninstPage instfiles ;卸载

对于安装程序,典型的页面设置应该显示许可协议页面,允许选择要安装的组件,允许选择要安装的目录,最后安装选择的组件。对于卸载程序,应该显示卸载确认页面,然后执行卸载。

3,区段 Sections 脚本结构

在一个普通的安装包里用户需要安装许多东西。例如在 NSIS 分配安装包里你可以选择安装源码、附加插件、脚本样例或其他。里面的每个组件都有它自己的代码块,当用户选择了安装该组件,那么安装程序就会执行对应的代码。在脚本里,这些代码称为区段。每个可见的区段都可以作为一个组件给用户选择是否安装,在这里我们暂不讨论不可见的区段。你可以只使用一个区段来构建安装包,但是如果你想要使用组件页来让用户选择可选的组件,那你就需要使用多个区段。

卸载程序也可以有多个区段。卸载程序区段名前要加上前缀“un.”。例如:

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

使用在段里的指令和安装程序属性指令不一样,他们在用户电脑运行环境里执行。这些指令可以解压文件读取和写入注册表、INI文件或普通文件,创建目录,创建快捷方式和更多功能。你可以在 指令 找到更多。

更多的基本用法说明 SetOutPath 告诉安装程序要把文件输出到哪里,和要解压哪些 文件

例:

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

4,函数 Functions 脚本结构

函数和区段类似,也包含了代码。 区段和函数所不同的是他们被调用的形式。一共有两种函数类型:用户函数和回调函数。

用户函数可以从一个区段里或另一个函数使用 Call 指令。 用户函数不能直接执行而只能调用它。在函数内的代码都会被执行然后安装程序会继续执行 Call 指令后面的指令,除非你在函数里面使用了退出指令。用户函数当你在安装程序里需要多次、多处使用一组指令的时候非常有用。如果你把代码放到一个函数里你可以节省拷贝的次数并且更容易的去修改、更新代码。

回调函数可以在某些定义事件之前被调用比如当安装程序开始运行时,回调是可选的。例如你想欢迎用户使用你的安装程序你可以定义一个名为 .onInit 的函数。NSIS 编译器会由它的名字知道它是一个回调函数并且会在安装程序开始时调用它。

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

Abort 在回调函数里有特殊含义。每个回调函数都有它自己的含义,详细情况请查看回调函数 。 在上面的例子中 Abort 告诉安装程序停止初始化安装并立即退出。

5,编译命令 Compiler Commands

二,数据类型

1,数字

对于数字参数,使用十进制(数字)或十六进制(以 0x 开头的,比如: 0x12345AB),或八进制(以 0 开头且无 x)。

颜色被设置为十六进制 RGB 形式,像 HTML 那样但是没有 # 开头。

IntCmp 1 0x1 lbl_equalSetCtlColors $HWND CCCCCC

脚本文件格式

2,字串中的常量

$$

转义,用来表示 $。

$\r

用来表示一个回车(\r)。

$\n

用来表示新的一行(\n)。

$\t

用来表示一个 Tab(\t)。

三,变量

1,用户变量

变量以 $ 开头。用户变量应该 (不是必须) 事先被声明并且区分大小写。所有的变量都是全局的并且可以用于区段和函数。需要注意的是,在默认情况下变量被限制在1024 字节(除非增大NSIS版本的NSIS_MAX_STRLEN值)。

命名规则:$ + 字母或_或数字

声明:Var [/GLOBAL] 变量名

Var exampleFunction testVar Var /GLOBAL example2 #区段或函数内定义的变量使用/GLOBAL标记可以更易读,但实际上加不加标记所有定义的变量都是全局的。 StrCpy $example "example value" StrCpy $example2 "another example value"FunctionEnd

2,系统保留的变量

$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9

这些变量可以像用户变量一样使用,但常用于公用函数或宏。你不需要声明这些变量,所以当你在公用代码里使用他们的时候不能有任何名字冲突。当在公用代码里使用的时候,推荐你使用堆栈保存和恢复他们原来的数据。这些变量也可以在插件里传递,因为他们可以被 DLL 插件读取和写入。

$INSTDIR

安装目录 ($INSTDIR 可以使用 StrCpyReadRegStrReadINIStr 等等来更改。例如在 .onInit 函数里可以用来做高级的检测安装定位)。

注意在卸载程序代码里,$INSTDIR 为卸载程序所在的目录而不是在安装程序里所指定的目录。例如,你把卸载程序放在 $WINDIR 里并且用户没有移动它,那么在卸载程序里 $INSTDIR 就等于 $WINDIR。如果你要把卸载程序放到到另外的位置,那么你应该先把安装程序的 $INSTDIR 值写入注册表或其它容易保存的地方,然后在卸载程序里读取该值并赋值给卸载程序里的 $INSTDIR。

$OUTDIR

当前输出路径 (通过 SetOutPath 设定或通过 StrCpyReadRegStrReadINIStr 等等)

$CMDLINE

安装程序的命令行输入。命令行的格式如下面之一所示:

  • “完整路径\安装程序.exe” 参数 参数 参数

  • 安装程序.exe 参数 参数 参数

  • 对于解析“参数”部分,参阅 GetParameters 在 常用函数附录。如果在命令行里指定了 /D= (用来跳过安装路径的选择)那么 /D= 后面的参数将不会被保存在 $CMDLINE(前面的可以保存)。

$LANGUAGE

当前使用的语言标识符。例如,英语是 1033。你可以在 .onInit 里更改。

四,常量

常量通常用在 InstallDir 属性里。

需要注意的是一些新的常量并不是在所有的 OS 上都是正常的。例如 $CDBURN_AREA 仅在 Windows XP 及以上系统中才正常。如果在 Windows 98 中使用将会得到空值。除非特别提示,否则该常量都是在所有 OS 上有效的。

$PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64

程序文件目录(通常为 C:\Program Files 但是运行时会检测)。在x64 Windows中,当 $PROGRAMFILES64 指向 C:\Program Files时,$PROGRAMFILES 和 $PROGRAMFILES32 指向 C:\Program Files (x86) 。当安装 x64 应用程序时通常用$PROGRAMFILES64。

$COMMONFILES, $COMMONFILES32, $COMMONFILES64

公用文件目录。这是应用程序共享组件的目录(通常为 C:\Program Files\Common Files 但是运行时会检测)。在x64 Windows中,当 $COMMONFILES64 指向 C:\Program Files\Common Files时,$COMMONFILES 和 $COMMONFILES32 指向 C:\Program Files (x86)\Common Files。 当安装 x64 应用程序时通常用 $COMMONFILES64。

$DESKTOP

Windows 桌面目录(通常为 C:\Windows\Desktop 但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。

$EXEDIR

安装程序运行时的位置。(从技术上来说你可以修改此变量,但并不是一个好方法)。

$EXEFILE

安装程序的名称。

$EXEPATH

安装程序运行时的完整路径。

${NSISDIR}

包含 NSIS 安装目录的符号定义标记。常用于在你想调用在 NSIS 目录下的资源时,例如:图标、界面……

在 Window 平台等于 makensis 所在的目录而在其它平台则在编译时决定 (信息请看 INSTALL 文件)。你可以在编译前通过修改 NSISDIR 环境变量来改变默认的设置。更多信息请看 3.1.3 节

$WINDIR

Windows 目录(通常为 C:\Windows 或 C:\WinNT 但在运行时会检测)。

$SYSDIR

Windows 系统目录(通常为 C:\Windows\System 或 C:\WinNT\System32 但在运行时会检测)。

$TEMP

系统临时目录(通常为 C:\Windows\Temp 但在运行时会检测)。

$STARTMENU

开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。

$SMPROGRAMS

开始菜单程序目录(当你想定位 $STARTMENU\程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$SMSTARTUP

开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$QUICKLAUNCH

在 IE4 活动桌面及以上的快速启动目录。如果快速启动不可用,仅仅返回和 $TEMP 一样。

$DOCUMENTS

文档目录。一个当前用户典型的路径形如 C:\Documents and Settings\Foo\My Documents。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量在 Windows 95 且 Internet Explorer 4 没有安装时无效。

$SENDTO

该目录包含了“发送到”菜单快捷项。

$RECENT

该目录包含了指向用户最近文档的快捷方式。

$FAVORITES

该目录包含了指向用户网络收藏夹、文档等的快捷方式。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量在 Windows 95 且 Internet Explorer 4 没有安装时无效。

$MUSIC

用户的音乐文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量仅在 Windows XP、ME 及以上才有效。

$PICTURES

用户的图片目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量仅在 Windows 2000、XP、ME 及以上才有效。

$VIDEOS

用户的视频文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量仅在 Windows XP、ME 及以上才有效。

$NETHOOD

该目录包含了可能存在于我的网络位置、网上邻居文件夹的链接对象。

该常量在 Windows 95 且 Internet Explorer 4 和活动桌面没有安装时无效。

$FONTS

系统字体目录。

$TEMPLATES

文档模板目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$APPDATA

应用程序数据目录。当前用户路径的检测需要 Internet Explorer 4 及以上。所有用户路径的检测需要 Internet Explorer 5 及以上。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量在 Windows 95 且 Internet Explorer 4 和活动桌面没有安装时无效。

$LOCALAPPDATA

本机应用程序数据目录。

该常量仅在 Windows 2000 或以上系统有效。

$PRINTHOOD

该目录包含了可能存在于打印机文件夹的链接对象。

该常量在 Windows 95 和 Windows 98 上无效。

$INTERNET_CACHE

Internet Explorer 的临时文件目录。

该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。

$COOKIES

Internet Explorer 的 Cookies 目录。

该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。

$HISTORY

Internet Explorer 的历史记录目录。

该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。

$PROFILE

用户的个人配置目录。一个典型的路径如 C:\Documents and Settings\Foo。

该常量在 Windows 2000 及以上有效。

$ADMINTOOLS

一个保存管理工具的目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

该常量在 Windows 2000、ME 及以上有效。

$RESOURCES

该资源目录保存了主题和其他 Windows 资源(通常为 C:\Windows\Resources 但在运行时会检测)。

该常量在 Windows XP 及以上有效。

$RESOURCES_LOCALIZED

该本地的资源目录保存了主题和其他 Windows 资源(通常为 C:\Windows\Resources\1033 但在运行时会检测)。

该常量在 Windows XP 及以上有效。

$CDBURN_AREA

一个在烧录 CD 时储存文件的目录。

该常量在 Windows XP 及以上有效。

$HWNDPARENT

父窗口的十进制窗口句柄。

$PLUGINSDIR

该路径是一个临时目录,当第一次使用一个插件或一个调用 InitPluginsDir 时被创建。该文件夹当安装程序退出时会被自动删除。这个文件夹的用意是用来保存给 InstallOptions 使用的 INI 文件、启动画面位图或其他插件运行需要的文件。

五,流程控制语句

1,条件语句:

条件判断或执行代码循环可以使用 StrCmpIntCmpIfErrorsGoto 和其它来实现,但是还有更方便直观的方式来实现。 LogicLib 提供了很多简单的宏来做条件或联合逻辑判断, 这些语法请参考 LogicLib.nsh ,并且这些语法很像其它的初学者和高级用户熟悉的语言。

要使用LogicLib 必须要包含如下头文件

!include LogicLib.nsh

例如,对变量值的判断应该像这样:

StrCmp $0 'some value' 0 +3 MessageBox MB_OK '$$0 is some value' Goto doneStrCmp $0 'some other value' 0 +3 MessageBox MB_OK '$$0 is some other value' Goto done# else MessageBox MB_OK '$$0 is "$0"'done:

然而,如果使用 LogicLib 的话代码将更具有可读性并更容易理解,当然也更容易维护,看起来就象下面的代码:

${If} $0 == 'some value' MessageBox MB_OK '$$0 is some value'${ElseIf} $0 == 'some other value' MessageBox MB_OK '$$0 is some other value'${Else} MessageBox MB_OK '$$0 is "$0"'${EndIf}

也可以用 switch 来实现相同的效果,像下面的那样:

${Switch} $0 ${Case} 'some value' MessageBox MB_OK '$$0 is some value' ${Break} ${Case} 'some other value' MessageBox MB_OK '$$0 is some other value' ${Break} ${Default} MessageBox MB_OK '$$0 is "$0"' ${Break}${EndSwitch}

支持多个条件判断。下面的例子当 $0 和 $1 为空的时候通知用户:

${If} $0 == ''${AndIf} $1 == '' MessageBox MB_OK|MB_ICONSTOP 'both are empty!'${EndIf}

LogicLib 不需要格外的跳转标记,当然也没有了标记同名的冲突,并且当代码改动的时候不再需要每次都修改相对跳转。

2,循环语句

脚本结构

LogicLib 也可以使用简单的循环,下面的例子将会从 0 到 5 循环:

要使用LogicLib 必须要包含如下头文件

!include LogicLib.nsh

StrCpy $R1 0${While} $R1 < 5 IntOp $R1 $R1 + 1 DetailPrint $R1${EndWhile}

${For} $R1 1 5 DetailPrint $R1${Next}

StrCpy $R1 0${Do} IntOp $R1 $R1 + 1 DetailPrint $R1${LoopUntil} $R1 >= 5

第三章,开发环境

一,开发工具

工作流程:先说一下NSIS的工作原理,首先要创建一个(.nsi)安装程序脚本文件,在这个脚本文件里,就是已经设定好了的安装程序的每一步的工作内容,再使用编译器编译,生成一个可执行的(.exe)文件。当你把这个可执行文件发布出去,别人就可以安装你的软件了。 建议用NSIS+NIS Edit工具来打造你自己的安装程序。首先利用NIS Edit工具的向导来生成NSIS代码,然后直接利用NSIS的编译器直接进行编译就行了。 幻灯片 48

•HM NIS –http://hmne.sourceforge.net/ • •Venis VIX –http://www.spaceblue.com/venis/ •EclipsePlugin –http://eclipsensis.sourceforge.net/

二,调试脚本

如果你要实现更多的功能那么你的脚本就会变得更复杂。这将会增加出错的可能性,特别是当你使用了很多变量的时候。以下将有可能会对你的脚本调试有所帮助。使用MessageBoxes 或 DetailPrint 来显示变量内容。 对所有变量使用 DumpState 插件来勾画总体大纲。 默认情况下安装程序会把所有的操作显示在记录窗口上,你可以把记录的文本复制到剪贴板里(Ctrl+C 或使用鼠标右键的复制菜单),当然也有方法把它直接写到一个文件里,看 这里

三,NSIC开发框架

•1,辅助工具 –MakeNSISW (compiler interface) –Zip2Exe (convert ZIP to SFX) –Language Files 2,帮助文档 –NSIS User Manual –FAQ –NSIS Wiki

脚本结构

四,脚本的执行

当用户运行安装程序或卸载程序,页面将按照脚本中定义的次序显示。当到了安装页面的时候将执行选中的区段(组件)并按照在脚本中定义的次序执行。如果没有显示组件选择页面那么所有的区段都会执行除了在脚本里显式禁止。

除了区段里的代码,还有一些在回调函数里的代码也会被执行,而且可能会在区段之前就执行了。比如 .onInit 回调函数就最先被执行,或者在页面显示过程中执行某些 页面回调函数

五,编译器命令

编译器命令会在你编译时在你的电脑上执行。他们可以用于条件编辑、包含头文件、运行一个应用程序、改变工作目录和更多。最常见的用法是定义,定义是编译时的常量,你可以定义你的产品版本号并在你的脚本里使用。例如:

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

关于定义更详细的信息请看 条件编辑

另一个常见的命令是宏。宏用于在编译时插入代码,依赖于定义并使用定义的值。宏的命令在编译时会插入。这样你只需要写一个通用的代码并只需要作为小的更改就可以多次的使用。例如:

!macro MyFunc UNFunction ${UN}MyFunc Call ${UN}DoRegStuff ReadRegStr $0 HKLM Software\MyProgram key DetailPrint $0FunctionEnd!macroend!insertmacro MyFunc ""!insertmacro MyFunc "un."

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

更多信息请看 编译时命令

编译器

六,编译器

在你制作安装程序时创建了你的脚本后所要做的第二件事就是编译你的脚本。MakeNSIS.exe 就是 NSIS 编译器。它会载入你的脚本,解析并创建你的安装程序。

要编译你需要在你的 .nsi 文件上点右键并选择“Compile NSI”或“Compile NSIS (with bz2)”。这样将会使用 MakeNSISw 来引导并调用 MakeNSIS 来编译你的脚本。MakeNSISw 将会给出 MakeNSIS 的输出并在一个可见的窗口里显示出来,你可以复制、测试安装程序、浏览和更多。如果你在右键弹出菜单里没有找到编译 NSI 的选项可能是你在安装 NSIS 时没有选择外壳扩展,你可以从 Windows 命令行里使用 MakeNSIS.exe 或者重新安装 NSIS 并选择安装外壳扩展。

编译器会检查你的脚本并给出警告或错误。如果发生了错误(例如需要两个参数而你只给了一个)编译器竟会退出并给出一个包含错误行数的错误信息显示。对于非关键性错误编译器将会给出一个警告(例如在一个脚本里有两个 DirText 命令)。如果你的脚本没有任何错误则编译器将会输出你要发布的安装程序。

NSIS 支持不同的压缩器方案 zlib 和 bzip2。zlib 非常快并且在资源消耗方面非常有效率。bzip2 通常在制作大的安装程序时有可观的效果,但是需要更多的内存并且有一点慢。要设置压缩器请使用 SetCompressor

你也可以在 Linux、BSD 或 Mac OS X 服务器上面编译安装程序。详细信息请看 构建 NSIS。

新式用户界面(Modern UI)

七,新式用户界面(Modern UI)

一个流行的 NSIS 用户界面就是新式用户界面,它有着像最近的 Windows 版本一样的界面。新式界面不仅仅是一个自定义的资源文件,它拥有更多的新界面基础。它的特点在于有白色的顶部来描述当前步骤、在组件选择页面有一个描述区域、一个欢迎页面、一个安装结束页面并可允许用户选择运行安装的应用程序或是重新启动电脑及更多功能。

插件

八,插件

NSIS 支持可从脚本里调用的插件。插件是由一些 C、C++、Delphi 或其它程序语言写的 DLL 文件,可以提供基于 NSIS 的更多增强型代码。

一个插件的调用像这样:

DLL名::函数名 "参数1" "参数2" "参数3"

每一个插件的函数由它的参数有它自己的要求,一些不需要,一些则需要足够的参数。例子:

nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP'InstallOptions::dialog "$PLUGINSDIR\test.ini"NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0

NSIS 可识别的插件会列表于编译器输出的顶部。NSIS 会在 NSIS 目录下的 Plugins 目录 里查找插件并且会列出所有可用的函数。你也可以使用 !addPluginDir 来告诉 NSIS 在另外的目录里查找插件。

NSIS 发布时已经包含了很多的插件。InstallOptions 是一个受欢迎的插件,它允许你建立自定义的的页面,并与 NSIS 页面命令结合(看 页面)。 开始菜单插件 提供了一个可允许用户选择一个开始菜单目录的页面。这里还有许多不同用途的大量插件,查看 Docs 目录 里的帮助文件和例子。你也可以在线查找另外的插件: NSIS 维客.

你也可以创建你自己的插件。C、C++ 和 Delphi 头文件都是可用的,基础的插件编写例子你可以查看源代码包里的 Contrib/ExDLL。包括插件的源代码你也可以在源代码包里找到。

参考资料:

Convert vb install script to nsis script VB Converter

RESTOOLS 工具系列汇 NSIS & InnoSetup

NSIS Complete Persian Tutorialhttp://forums.winamp.com/showthread.php?postid=226257342 Pages .pdf + Images + Samples

[PDF]NSIS Basic Installer

[PPT]NSIS - Tutorial

Quick Guide to NSIS NSIS + TutorialEclipseNSIS

A basic NSIS tutorial.

NSIS安装制作基础教程

NSIS初学者教程电子书下载

官方 NSIS 插件全集简单介绍

全方位掌握 NSIS 的使用

NSIS新手教程

Rubyscript2exe and NSIS…