[安装包制作]NSIS项目的基本结构

NSIS是一个用于生成安装程序的软件,用NSI脚本可以很方便地写出一个安装包。最大的优点就是免费。VS自带的建立MSI安装包能实现的功能比较单一,听说有微软有另一个专门做安装包的软件能实现更强大的功能,不过比VS Pro还要贵……。所以如果只是最简单的安装、卸载,MSI足够了,如果想多提供一些功能,又不想多花钱的话,NSIS或是INNO都是不错的选择。其中NSIS更灵活一些。INNO更简单一些。

 

目前发现的NSIS的主要缺点是:不支持在安装过程中取消安装。如果你觉得这个功能很重要的话,还是不要用NSIS了。

 

下面就从最简单的说起——如何用NSIS建立一个安装包。建议见看看NSIS的帮助文档。因为下面的内容主要介绍帮助文档还没有讲到的部分。

 

NSISUser 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”都没有输出的可执行文件。而NSISUser Manual从头到尾没有给出一个完整的示例,并解释一下。这篇文章将向大家介绍一个功能基本完整的,行为基本正确的安装程序脚本。文中不会介绍NSI的语法,语法请参考User Manual

 

环境准备:

 

首先,如果大家还没有安装NSIS,请先从http://sourceforge.net/projects/nsis/下载最新的安装包。以2.44版为例,需要下载nsis-2.44-setup.exensis-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库的配置。

posted on 2009-04-02 23:50  南柯之石  阅读(5318)  评论(3编辑  收藏  举报

导航