用 NSIS 制作安装程序

用 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 installer
    OutFile "Installer.exe"

    # default section start; every NSIS script has at least one section.
    Section

    # default section end
    SectionEnd

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

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

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

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

    # set the name of the installer
    Outfile "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 file
    Outfile "hello world.exe"

    # open section
    Section

    # create a popup box, with an OK button and some text
    MessageBox 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 run

    FileOpen $0 "$DESKTOP\Hello_world.txt" w

    # write the string "hello world!" to the output file
    FileWrite $0 "hello world!"

    # close the file
    FileClose $0
    # Show Success message.
    MessageBox MB_OK "Hello_world.txt has been created successfully at Desktop!"

    # end the section
    SectionEnd

上面的脚本很简单,其中 FileOpen、FileWrite、FileClose 是三个文件操作函数。

$0 是文件句柄。

文件拷贝

安装程序最重要的功能是将我们的文件拷贝到安装路径下。所以这一部分内容要仔细讲讲。

还是先从一个最简单的例子程序开始,将一个文本文件安装到指定的安装路径下。在这里,安装路径设为桌面。后面的例子还会交给大家如何让安装程序可以自定义安装路径。

我们的文本文件名为 test.txt。这个文件需要和我们的脚本放在一个目录中,这样 NSIS 才能找到。通常我们会为每一个安装程序项目建立一个文件夹,文件夹中放置 NSIS 脚本和我们的程序的相关文件。

    # define the name of the installer
    Outfile "simple installer.exe"

    # define the directory to install to, the desktop in this case as specified
    # by the predefined $DESKTOP variable
    InstallDir $DESKTOP

    # default section
    Section

    # define the output path for this file
    SetOutPath $INSTDIR

    # define what to install and place it in the output path
    File test.txt

    SectionEnd

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

    # define installer name
    OutFile "installer.exe"

    # set desktop as install directory
    InstallDir $DESKTOP

    # default section start
    Section

    # define output path
    SetOutPath $INSTDIR

    # specify file to go in output path
    File test.txt

    # define uninstaller name
    WriteUninstaller $INSTDIR\uninstaller.exe

    #-------
    # default section end
    SectionEnd

    # create a section to define what the uninstaller does.
    # the section will always be named "Uninstall"
    Section "Uninstall"

    # Always delete uninstaller first
    Delete $INSTDIR\uninstaller.exe

    # now delete installed file
    Delete $INSTDIR\test.txt

    SectionEnd

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

开始菜单增加条目

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

    # define name of installer
    OutFile "installer.exe"

    # define installation directory
    InstallDir $DESKTOP

    # For removing Start Menu shortcut in Windows 7
    RequestExecutionLevel user

    # start default section
    Section

        # set the installation directory as the destination for the following actions
        SetOutPath $INSTDIR

        # create the uninstaller
        WriteUninstaller "$INSTDIR\uninstall.exe"

        # create a shortcut named "new shortcut" in the start menu programs directory
        # point the new shortcut at the program uninstaller
        CreateShortCut "$SMPROGRAMS\new shortcut.lnk" "$INSTDIR\uninstall.exe"
    SectionEnd

    # uninstaller section start
    Section "uninstall"

        # first, delete the uninstaller
        Delete "$INSTDIR\uninstall.exe"

        # second, remove the link from the start menu
        Delete "$SMPROGRAMS\new shortcut.lnk"

    # uninstaller section end
    SectionEnd

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

需要多说一句

    # For removing Start Menu shortcut in Windows 7
    RequestExecutionLevel user

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

读取注册表

注册表操作也是安装程序经常要做的工作。

下面这段脚本通过读取注册表中相关的字段来判断系统中是否安装了 JRE 环境。

    # name the installer
    OutFile "installer.exe"

    #default section start
    Section

        # read the value from the registry into the $0 register
        ReadRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion

        # print the results in a popup message box
        MessageBox MB_OK "version: $0"

    # default section end
    SectionEnd

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 22:48:14

用 NSIS 制作安装程序的相关文章

使用好压(HaoZip)软件打包EverEdit制作安装程序

最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:EverEdit定制版: 打包工具:国产压缩软件 HaoZip 好压: 打包过程: 1.安装HaoZip好压软件,打开后,选择需要制作为安装包的文件夹,这里选择“EverEdit”文件夹,然后点击“自解压”. 2.在选项框中,模块选项卡,选择“安装向导模块”,注意自解压文件路径. 3.文本选项卡中,输入自

2010.2.1 制作安装程序步骤

制作安装程序的步骤vs2005-20091222 1.在同一解决方案下,添加项目,选择安装和部署-安装项目,设定名称,此名称就是exe程序的名称,确定 2.在"应用程序文件夹"中右击添加程序需要的文件,系统文件会自动添加.自己的文件可以随便删除,系统文件可在"检测到的依赖项"中排出.应用程序的图标也添加进来,2个,一个主程序,一个卸载程序图标 3.添加卸载文件,从system32目录下添加"msiexec.exe"到"应用程序文件夹&q

C#打包制作安装程序过程全记录

该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署-〉安装向导(或安装部署),如命名为setup. 2. 将要打包的项目导入到这个安装项目中,有两种方式:   第一种,自动方式,在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目,这样就会把这个项目添加到该解决方案中来,   然后在安装项目setup上右击-〉添加-〉项目输出-〉主输出,在项

利用ASP.NET操作IIS (可以制作安装程序)

很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很容易操作IIS. 本文主要介绍四点: 一.添加应用程序 二.添加应用程序池 三.设置应用程序所使用的应用程序池 四.IIS里其他属性的设置 首先,必须确保电脑上已经安装了IIS,安装后,系统默认会注册一个DLL,通常位置是 C:\Windows\assembly\GAC_MSIL\Microsoft

使用NSIS (NullSoft Scriptable Install System)制作安装程序

Name "capture" OutFile "capture.exe" InstallDir "$PROGRAMFILES\capture" Page directory Page INSTFILES UninstPage uninstConfirm UninstPage instfiles Var remote_zip_file Var local_zip_file Section "" SetOutPath $INSTD

猎豹MFC--InnoSetup制作安装程序

随便建立一个MFC小程序,值谈一个对话框: 双击打开该InnoSetup: 然后文件新建: 没有的就跳过. 还缺,就再添加: 打包的时候一定呀把动态链接库一起打包 来自为知笔记(Wiz)

使用NSIS制作Windows安装程序快速入门

使用NSIS制作Windows安装程序快速入门 这里使用的NSIS版本为3.04,HM NIS Edit版本为2.0.3. 制作安装程序的过程: 确定安装的功能和界面元素 编写 NSIS 脚本 使用 NSIS 提供的 makensis 或者 makensisw 程序,将步骤 2 编写的脚本编译成可执行的安装程序(点击HM NIS Edit编译按钮) 配置使用 NSIS 的环境 安装 NSIS 安装脚本编辑工具 HM NIS Edit 也可以使用VS Code安装NSIS脚本插件 使用HM NIS

nstallShield制作打包程序详解(图)

InstallShield产品,是安装工具领域事实上的标准.InstallShield 软件是软件安装.配置软件包和升级解决方案领域内公认的标准.InstallShield已经成为安全安装软件的标准解决方案,涉及全球6.9万多个开发组织和5亿台电脑.公司提供广泛的产品和服务,为软件供应商.系统管理员以及最终用户提供成功的销售.管理和应用安装.本文将以InstallShield10.5 Premier Edition为例详述打包的过程.使用工程助手(Project assistant)设计    

转 : 用Delphi编写安装程序

http://www.okbase.net/doc/details/931  还没有亲自验证过,仅收藏 当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做的第一步操作.很多报刊文章介绍了许多如何利用installshield等工具软件来制作安装程序的方法,这种办法可以很快建立起较常见的安装模式,但用这种办法也有一些不足,如做成的安装程序一般较大:风格较单一:不能灵活的控制启动方式和快捷方式.其实安装