一、NSIS介绍
概述
最近需要写一个安装程序,比对了一下现有的安装工具,最后选定了NSIS,最主要的原因一是开源、二是灵活。
下面把我的要求简单列举下:
1、需要检查系统环境是否满足要求
2、需要界面友好的安装过程
3、需要一些自定义界面,在安装过程中来获取一些必须的信息
4、需要根据界面的选择来执行或跳过一些安装过程
5、需要操作数据库
6、需要操作IIS
7、需要使用PowerShell命令设置AD/Exchange/Lync
8、需要操作注册表,用于标识安装步骤以用于卸载或回滚的执行
经过调查发现NSIS都能实现,但它有自己的一套脚本语言,需要学习成本,如果有编程基础这个其实不难,下载一个“NSIS用户手册”、一个"NSIS"(脚本编译)、一个“HM NIS Edit”(脚本编辑)一切就可以开始啦!
基本知识
那么首先,我们先看一下“NSIS用户手册”吧,你总得先了解一下NSIS这个东西的基本介绍和脚本的基本结构吧。
我把了解的最重要的东西列举一下,其他涉及到细节或遇到难题就可以随时查询用户手册或者google万能的网络:
1、安装程序的主体脚本文件 .nsi,可以包含一个或多个头文件 .nsh
头文件可以通过把它划分为一个或多个代码块来帮你编排你的脚本,你也可以在头文件里加入功能函数或宏,并且在多个安装程序里包含头文件,这样可以更容易的升级你的程序,并且使你的脚本很容易的让人看懂。
2、一个安装程序的基本结构包含应用程序的基本信息定义、头文件引用、安装程序属性设置、安装程序页面、区段(安装过程脚本)和函数(安装页面创建之前、显示前和离开前的代码)等
应用程序的基本信息定义:产品的名称、版本、发布者、网站等信息;头文件引用:!include ***.nsh;
安装程序属性设置:安装程序语言、安装程序名称、输出安装文件、默认安装目录等信息;
安装程序页面:内建页面(欢迎页面、许可页面、目录选择页面、组件选择页面、安装记录页面、完成页面)、自定义页面;
区段:安装程序执行的实体,每一个 NSIS 安装程序包含一个或多个区段;
函数:最终要的是页面的回调函数(每个内建页面有三个回调函数(预置函数、显示创建函数和离开函数)、自定义的页面仅有两个回调函数(创建函数和离开函数))、
再就是安装的回调函数(.onInit、.onInstFailed、.onInstSuccess等)、还可以有一些自定义的函数;
3、保存值和使用值
可以使用Var命令来声明变量,使用变量来保存值,所有定义的变量都是全局的,即使在区段或函数内定义。所以你可以声明变量、代码中对变量进行各种操作(赋值、比较、字符串操作等,使用变量需要加$),下面一个简单的例子:
Var str1 Var hasValue Function StrOper StrCpy hasValue False ; $hasValue = False ${If} $hasValue == True MessageBox MB_OK "$str1" ${EndIf} StrCpy $str1 "Hello," ; $str1 = Hello, StrCpy $str1 "$str1World" ; $str1 = Hello,World StrCpy hasValue True ; $hasValue = True ${If} $hasValue == True MessageBox MB_OK "$str1" ${EndIf} FunctionEnd
另外一个保存值的方式是放入堆栈中,堆栈都知道是“先进后出”的,最重要的两个命令就是Push和Pop,下面一个简单的例子:
Var str1 Function StackOper Push "Hello" Pop $str1 ; $str1 = Hello Push "$str1 World" Pop $str1 ; $str1 = Hello World MessageBox MB_OK "$str1" FunctionEnd
NSIS脚本有一些内置的变量,如:$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9;这些变量可以像用户变量一样使用,但不用声明这些变量;另外还有一些特殊含义的内置变量,如:$INSTDIR、$OUTDIR等。
NSIS脚本还有一些常量,如:$PROGRAMFILES,$DESKTOP,$WINDIR,$STARTMENU,$EXEDIR等等,有需要可以查看帮助文档。
4、指令
NSIS脚本的执行是依靠一个个的指令,这些指令包括字符串操作指令、数学操作指令、文件操作指令、注册表读写指令、用户界面指令、流程控制指令等等,具体指令可以随时查看用户手册,另外你还可以通过插件来扩展它的能力,这些插件通常是一个DLL文件,关于插件以后章节会详细说明。
以上,我们通过快速浏览NSIS用户手册,了解了脚本的基本结构和基本语法方面的信息。下面,我们需要搭建NSIS的开发和编译环境。
编译环境
下载了NSIS最新的安装包,根据向导一步步安装即可,安装完成后会在系统目录上有NSIS目录,里面就有用户手册和一些脚本例子,另外就是在脚本文件.nsi点击右键会出来NSIS快捷菜单,如下图所示:
编辑/IDE工具
编译环境都好了,接下来就该说到编辑脚本的工具了,最简单的是用文本文件,其实任何可以编辑文本文件的工具都可以,但一是没有任何格式不好看,再就是对于一个才开始编辑NSIS脚本的新手来说一头雾水,不知从何下手啊,好了,工具来了,下载HM NIS Edit最新版本,这是一个针对NSIS的免费的编辑/集成开发工具,安装后就可以使用啦,我能告诉你它不光让脚本更容易读写,最最打动我的其实是它的新建脚本向导功能,我在无从下手时通过向导生成的脚本省了很多工夫,也通过这些脚本更深刻的理解了脚本的结构和一些语法信息,再就是通过菜单NSIS可以直接编译脚本,脚本编译过程的输出信息会在输出界面显示,错误直接定位,界面如下所示:
好了,基本介绍啰啰嗦嗦这么多,应该有点记忆了吧,下章我们就从制作一个简单的NSIS安装包开始吧!