用 NSIS 制作安装程序

最近要给自己写的一个小程序做个安装程序。我的程序是用Qt开发的,所以本来想研究一下 Qt Installer Framework。 但是用 Qt Installer Framework 做安装程序好像还挺麻烦,研究了一会儿没有什么头绪,所以就暂时放弃了。然后就在网上随便搜了搜,发现有个 NSIS,看介绍还比较简单,就试着用了用,感觉还可以。这篇其实就是我学习 NSIS 时的一个学习笔记。

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。NSIS 通过它的脚本语言来描述安装程序的行为和逻辑的。

NSIS 的主页在:http://nsis.sourceforge.net

在这里可以找到最近版本的 NSIS。 我使用的版本是 3.0b2。

Hello world!

前面已经说过 NSIS 通过它的脚本语言来描述安装程序的行为和逻辑的。下面就先来看一个最简单的脚本文件: 1.nsi

    # name the installerOutFile "Installer.exe"# default section start; every NSIS script has at least one section.Section# default section endSectionEnd

文件中,所有 # 开始的行都是注释。除了这些注释外,这个脚本其实什么也没做。但是却给出了 NSI 脚本的框架。

利用 NSIS 提供的工具 MakeNSISW 可以编译这个脚本。编译成功后会有类似这样的输出:

点击 Test Installer 可以直接运行刚才生成的安装文件。运行后的结果如下:

这个安装程序现在还什么都做不了。下面将这个安装脚本扩充一点。

    # set the name of the installerOutfile "helloworld.exe"# create a default section.Section# create a popup box, with an OK button and the text "Hello world!"MessageBox MB_OK "Hello world!"SectionEnd

生成的安装文件改名为 helloworld.exe。运行这个安装文件后会弹出一个对话框:

到这里,我们的安装程序至少有点功能了。

文本文件读写

下面的例子要让我们的 NSIS 脚本做些文件读写的工作。这种类型的操作在安装程序中还是经常要用到的。比如生成个配置文件一类的工作都是要文件读写的。

    # declare name of installer fileOutfile "hello world.exe"# open sectionSection# create a popup box, with an OK button and some textMessageBox MB_OK "Now We are Creating Hello_world.txt at Desktop!"# open an output file called "Hello_world.txt", # on the desktop in write mode. This file does not need to exist # before script is compiled and runFileOpen $0 "$DESKTOP\Hello_world.txt" w# write the string "hello world!" to the output fileFileWrite $0 "hello world!"# close the fileFileClose $0# Show Success message.MessageBox MB_OK "Hello_world.txt has been created successfully at Desktop!"# end the sectionSectionEnd

上面的脚本很简单,其中 FileOpen、FileWrite、FileClose 是三个文件操作函数。
$0 是一个变量,这里相当于文件句柄。

$DESKTOP 是 NSIS 预定义的常量。表示的是桌面所在的目录,类似的常量还有很多。比较常用的有:
$PROGRAMFILES, $PROGRAMFILES32,
$PROGRAMFILES64

这三个表示程序的默认安装路径。在 64 位系统中, $PROGRAMFILES 和 $PROGRAMFILES32 通常表示 C:\Program Files (x86)。如果程序是 64 位的,应该安装在 $ROGRAMFILES64 目录下。

$WINDIR 是 windows 系统个安装路径。通常是 C:\Windows 。

$TEMP 是临时文件所在目录。通常是 C:\Windows\Temp。

$STARTMENU 开始菜单所在的目录。

$SMPROGRAMS 指向 $STARTMENU\Programs。

文件拷贝

安装程序最重要的功能是将我们的文件拷贝到安装路径下。所以这一部分内容要仔细讲讲。
还是先从一个最简单的例子程序开始,将一个文本文件安装到指定的安装路径下。在这里,安装路径设为桌面。后面的例子还会交给大家如何让安装程序可以自定义安装路径。
我们的文本文件名为 test.txt。这个文件需要和我们的脚本放在一个目录中,这样 NSIS 才能找到。通常我们会为每一个安装程序项目建立一个文件夹,文件夹中放置 NSIS 脚本和我们的程序的相关文件。

    # define the name of the installerOutfile "simple installer.exe"# define the directory to install to, the desktop in this case as specified  # by the predefined $DESKTOP variableInstallDir $DESKTOP# default sectionSection# define the output path for this fileSetOutPath $INSTDIR# define what to install and place it in the output pathFile test.txtSectionEnd

File 命令也是支持通配符的。因此可以写为:

File *.txt
File \*.\*

等多种形式。
如果要将子目录下的文件一起拷贝,可以写为:

File    \r *.*

安装完程序之后还应该提供卸载功能。下面就把这部分功能添加上。

    # define installer nameOutFile "installer.exe"# set desktop as install directoryInstallDir $DESKTOP# default section startSection# define output pathSetOutPath $INSTDIR# specify file to go in output pathFile test.txt# define uninstaller nameWriteUninstaller $INSTDIR\uninstaller.exe#-------# default section endSectionEnd# create a section to define what the uninstaller does.# the section will always be named "Uninstall"Section "Uninstall"# Always delete uninstaller firstDelete $INSTDIR\uninstaller.exe# now delete installed fileDelete $INSTDIR\test.txtSectionEnd

这部分代码也很简单,但是我没有搞明白为啥要先删除自己,再删除其他文件。把这两个删除语句调换一下位置,运行的也挺正常。这里的原理还请高手们指导。

Delete 命令还支持通配符。因此也可以写成下面的形式。

Delete $INSTDIR\*.*

相关的命令还有 RMDir,这个可以删除一个空目录(注意:只有空目录才能删除)。下面是个例子, 其中的 /r 表明删除指定目录及其所有子目录,如果子目录中还有子目录也会一并删除。 r 的含义是递归(recusive)。

RMDir /r $INSTDIR

删除开始菜单的条目时可能会需要管理员权限。我们可以在脚本的最开头加上:

RequestExecutionLevel admin

开始菜单增加条目

下面的代码会在开始菜单的应用程序条目中增加一个快捷方式,指向我们的 uninstall.exe。 为了简单,我们的安装路径还是在桌面。

    # define name of installerOutFile "installer.exe"# define installation directoryInstallDir $DESKTOP# For removing Start Menu shortcut in Windows 7RequestExecutionLevel admin# start default sectionSection# set the installation directory as the destination for the following actionsSetOutPath $INSTDIR# create the uninstallerWriteUninstaller "$INSTDIR\uninstall.exe"# create a shortcut named "new shortcut" in the start menu programs directory# point the new shortcut at the program uninstallerCreateShortCut "$SMPROGRAMS\new shortcut.lnk" "$INSTDIR\uninstall.exe"SectionEnd# uninstaller section startSection "uninstall"# first, delete the uninstallerDelete "$INSTDIR\uninstall.exe"# second, remove the link from the start menuDelete "$SMPROGRAMS\new shortcut.lnk"# uninstaller section endSectionEnd

这段脚本编译之后生成的安装文件的作用是在桌面放一个 uninstall.exe,然后再开始菜单的应用程序中增加一个 new shortcut.lnk。这个 new shortcut.lnk 指向 uninstall.exe。

需要多说一句

    # For removing Start Menu shortcut in Windows 7RequestExecutionLevel user

如果忘了写,则每次卸载时都需要用户做权限确认。 其实这样也挺好,多些提醒也没什么坏处。

读取注册表

注册表操作也是安装程序经常要做的工作。
下面这段脚本通过读取注册表中相关的字段来判断系统中是否安装了 JRE 环境。

    # name the installerOutFile "installer.exe"#default section startSection# read the value from the registry into the $0 registerReadRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion# print the results in a popup message boxMessageBox MB_OK "version: $0"# default section endSectionEnd

有了上面这些知识,就可以写个简单的安装程序。实际上 NSIS 的功能远不止这些。等以后用到那些功能时我再写博客来记录。

另外,准备一台“干净”的电脑也非常重要。所以干净,指的是这台电脑最好只安装了操作系统。这样才比较容易确定安装程序是否落下一些文件。当然,干这事情虚拟机是最适合的了。

用 NSIS 制作安装程序相关推荐

  1. 用NSIS制作安装文件

    1.前言 如果你是第一次制作安装程序,建议你使用 Setup Factory 或 CreateInstall 因为这两个安装程序是图形接口非常的适合初学者使用.笔者一开始也不会使用 NSIS 写脚本而 ...

  2. 使用NSIS制作安装文件

    1.前言 如果你是第一次制作安装程序,建议你使用 Setup Factory 或 CreateInstall 因为这两个安装程序是图形接口非常的适合初学者使用.笔者一开始也不会使用 NSIS 写脚本而 ...

  3. VS2005 制作安装程序的一些网络教程

    原文写于:2006-12-14 在VS2005中,制作安装程序需要建立setup project,后面的操作就比较简单了.我在网上看了一些文章,把它们列在下面: 文章 内容 备注 Customizin ...

  4. VS2010制作安装程序

    序 前些天想写一下制作安装程序,由于要写的内容比较多,一拖再拖,不过坚持就是胜利,今天终于写完了. 1概述 做应用软件制作安装程序是很必要的一件事情,本文主要介绍使用VS2010自带的打包组建来开发一 ...

  5. VS2005 制作安装程序

    今天在首页看到一篇   .Net项目制作安装程序 的文章,感觉博主讲解还是令人费解(对于我这样的新手,嘿嘿),所以自己动了一下手,让自己有所映像,顺便纪录下. 1.首先得有一需打包的项目,这里我就用以 ...

  6. vb.net 制作安装程序步骤

    自己开发的小程序,如何让别人使用啊, 需要制作安装程序,这里有一个简单的教程,可以参考一下. 手把手的介绍下如何使用[VB.Net自带的工具]进行安装程序的制作 本文以使用VB9(也就是VB.Net ...

  7. VS2008 SP1制作安装程序离线安装.Net Framework3.5

    VS2008 SP1制作安装程序离线安装.Net Framework3.5 這兩天都在弄一個 Windows Setup 專案,希望弄得盡善盡美,直到剛剛終於大功告成,但當我想將 .Net Frame ...

  8. Visual Studio制作安装程序教程

    1.新建安装部署项目 打开安装向导,点击下一步,或者直接点击完成.当文件比较大时,注意把工程放在空间充足的磁盘分区上. 2.具体制作过程 2.1 添加文件夹与程序文件 安装向导完成后即可进入项目文件夹 ...

  9. setup2go制作安装程序

    QT程序设计完毕时,我们就要发布自己的程序,发布程序有两种方法:一是静态编译,二是制作程序安装包. 静态编译好麻烦,我从来没有成功过,所以我用了动态编译方法,设计完成时,用release方式编译程序, ...

最新文章

  1. 【转】Visual Studio 2010 架构图之用例图(UML Use Case Diagram)
  2. Spring发布新成员:Spring GraphQL!高调出场的GraphQL能火起来了吗?
  3. 数据结构 - 平衡二叉树
  4. js获取当前页面的参数,带完善~~~
  5. SAP Commerce Cloud Spartacus UI 读取 Component 元数据的 Action 设计
  6. 如何给虚拟机上的linux系统添加虚拟硬盘
  7. 基于python的气象数据分析_基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其......
  8. 企业引进HRM系统需要规避的五大误区
  9. 统计二进制中1的个数(四种方案)
  10. BFS+模拟 ZOJ 3865 Superbot
  11. Java实训:学生信息管理系统
  12. 双目相机计算稠密深度点云详解教程
  13. java母类_java关键字分类详解
  14. 09年高考零分作文:兔子,你就是一个牛B
  15. 数码管显示倒计时c语言程序,第32节:数码管中的倒计时程序
  16. 货币战争悲壮的英雄:帕潘德里欧
  17. 构建nas_我的第一个diy nas服务器构建
  18. 银行间市场的USDCNY即期一天交易量到底有多少?
  19. Linux yum的在线安装(yum命令)
  20. 不符合正态分布的配对数据也有自己的统计方法。

热门文章

  1. python显示日历_Python获取时间范围内日期列表和周列表的函数
  2. 谷粒商城之商品服务-平台属性-属性组管理
  3. 3.4-3.8GHz 5G LTE CBRS频段天线解决方案
  4. c语言cyc函数,深入理解C语言
  5. 使用POI+hutool导入Excel并把内容添加到数据库中,直接可以用!!!
  6. 职称计算机应用cad考试,职称计算机CAD复习试题「附答案」
  7. 《小白H5成长之路19》if判断语句的一些用法
  8. 详解 ▏跨境电商9710出口报关-跨境知道
  9. 3秒爬取百度图片网站,批量下载各种图片
  10. 广西民大计算机信息安全专业好吗,广西民族大学专业排名