• [安装包制作]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库的配置。

  • 相关阅读:
    由后序遍历序列和中序遍历序列确定二叉树
    由先序遍历序列和中序遍历序列确定二叉树
    EBR-TLV数据格式
    埃利斯(A.Ellis)ABCDE情绪管理理论
    马斯洛需求层次理论
    【Linux命令】find命令
    Windows核心编程——动态库和静态库
    C++Socket编程—socket网络模型之事件选择模型模型
    C++Socket编程—socket网络模型之异步选择模型
    C++Socket编程—socket网络模型之select模型
  • 原文地址:https://www.cnblogs.com/nankezhishi/p/NSIS_Structure.html
Copyright © 2020-2023  润新知