[安装包制作]NSIS项目的基本结构
NSIS是一个用于生成安装程序的软件,用NSI脚本可以很方便地写出一个安装包。最大的优点就是免费。VS自带的建立MSI安装包能实现的功能比较单一,听说有微软有另一个专门做安装包的软件能实现更强大的功能,不过比VS Pro还要贵……。所以如果只是最简单的安装、卸载,MSI足够了,如果想多提供一些功能,又不想多花钱的话,NSIS或是INNO都是不错的选择。其中NSIS更灵活一些。INNO更简单一些。
目前发现的NSIS的主要缺点是:不支持在安装过程中取消安装。如果你觉得这个功能很重要的话,还是不要用NSIS了。
下面就从最简单的说起——如何用NSIS建立一个安装包。建议见看看NSIS的帮助文档。因为下面的内容主要介绍帮助文档还没有讲到的部分。
NSIS的User Manual第二章“Tutorial: The Basic”是这样描述脚本的结构的。
Required is the OutFile instruction, which tells NSIS where to write the installer, and one section.
大意就是说一个NSI脚本只要有一个OutFile指令和一个Section就可以了。就是下面这个样子:
OutFile "Min.exe"
Section
SectionEnd
一个什么也没有做的Installer就大功告成了。但是这样的示例对于学习NSI脚本可以说一点儿帮助也没有。因为我们需要的是一个可以完成基本功能的安装程序,而不是一个连“Hello world”都没有输出的可执行文件。而NSIS的User Manual从头到尾没有给出一个完整的示例,并解释一下。这篇文章将向大家介绍一个功能基本完整的,行为基本正确的安装程序脚本。文中不会介绍NSI的语法,语法请参考User Manual。
环境准备:
首先,如果大家还没有安装NSIS,请先从http://sourceforge.net/projects/nsis/下载最新的安装包。以2.44版为例,需要下载nsis-2.44-setup.exe和nsis-2.44-log.zip两个文件。安装完NSIS之后,把nsis-2.44-log.zip里解压出来的文件覆盖安装目录下的文件。这个nisi-2.44-log用于开启NSIS的安装日志功能。默认的安装包是没有这个功能的。
NSI脚本的编辑器推荐Notepad++。可以从http://notepad-plus.sourceforge.net/tw/site.htm下载最新版本。(之前一直用Emeditor,不过它目前不支持NSI脚本。用了Notepad++很惊异于其支持的语言数量。)
需求描述:
我们将要实现的Installer需要满足下面几个要求:
1. 界面看上去别太土:因为很不幸,NSIS编译出来的程序默认的风格很Win 98。要使用MUI2库来生成一个比较XP风格的安装包。关于MUI2包的使用,可以参考在线帮助文档。
2. 支持安装日志:安装时把安装的文件记录下来,主要用于卸载时只删除安装程序安装的文件。
3. 支持多语言。这个就不用解释了吧。
4. 基本的页面。这个是自带的,也不用怎么解释。
示例代码:
下面是一个比较完整的安装,但是功能还不是很完整,因为具体功能就要自己加了。
; 头文件应该放在最上面,C++也是这样。
!include "MUI2.nsh"
!include "uninstallfromlog.nsh" ; 卸载时要用的一个头文件,没有在默认安装包里,可以从这里下载
; 然后是一些基本的设置
Name "YourApp"
OutFile "YourAppSetup.exe"
InstallDir "C:\Program Files\XXXX\YourApp"
RequestExecutionLevel user
; 参数的定义
!define MUI_ABORTWARNING
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
; 安装页面定义
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; 卸载页面定义
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; 界面语言定义,想多支持就多加,但是加的语言,受OS限制不一定能显示出来,必须放在页面的定义之后。
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "English"
; 开启安装时的Log功能,必须是第一个Section
Section "-LogSetOn"
LogSet on
SectionEnd
; 然后是安装段和卸载段
Section "install"
SetOutPath $INSTDIR
WriteUninstaller $INSTDIR\Uninstaller.exe
File "..\YourApp\bin\Release\*.*"
SectionEnd
Section Uninstall
Call un.CreateLogFromFile
Call un.RemoveDirectoriesFromLog
Delete $INSTDIR\install.log
Delete $INSTDIR\Uninstaller.exe
RMDir $INSTDIR
SectionEnd
; 最后是各个函数,最好放在最后。
; 安装程序的初始化函数,显示了语言选择页面
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
快乐无极博客也给出了一种根据log文件进行卸载的另一个头文件,原理一样,大家可以参考一下。
先到这里吧,下一篇将介绍MUI2库的配置。