一、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安装包开始吧!

posted @ 2016-04-29 12:49  所以呢  阅读(27785)  评论(1编辑  收藏  举报