NSIS打包(二)第一个安装包

基本介绍完之后,我们大概了解了NSIS中有哪些组件,现在我们通过一个简单的demo来学习如何使用这些组件。

1、环境配置

NSIS的环境非常简单,只有一个安装包,安装后即可使用。

官网:http://nsis.sourceforge.net/Main_Page,可以到这里下载最新的安装包,也有一些demo可以学习。

安装完之后,将安装目录添加到系统环境变量就可以正常使用了。(也可以将安装目录拷贝到要使用的地方)

这里我们使用的版本是v3.0b1

2、开始

以下是一个最简单的安装包代码:

1 ; 输出文件的名字,必须写.exe后缀,不然无法打开
2 OutFile "Demo01.exe"
3
4 ; 必须至少有一个Section,可以没有名字
5 ; 这里我们的Section名字为"StartSec",内容只有一行,弹出一个对话框
6 Section StartSec
7     MessageBox MB_OK "My First NSIS Demo!"
8 SectionEnd

将以上内容保持至demo01.nsi文件中,打开cmd,执行命令makensis.exe demo01.nsi,即可生成Demo01.exe文件。

可以看出,除了一个Section,其他任何组件都没有,就可以是一个简单安装包了。

接下来我们来完善内容:

1)首先添加安装包详细信息

我们可以先来看一下生成的安装包。右键—>属性—>详细信息,如下图:

可以看到,只有时间和大小信息,我们来将内容填写完整。

1 ; 安装包详细信息,更多信息可以查看帮助文档,安装目录下的NSIS.chm文件
2 ; VIProductVersion是必须的,其他则可以根据需要来选择
3 VIProductVersion "1.0.0.0"
4 VIAddVersionKey /LANG=2052 "ProductName"        "Demo01"
5 VIAddVersionKey /LANG=2052 "CompanyName"        "MyCompany"
6 VIAddVersionKey /LANG=2052 "ProductVersion"     "1.0.0.0"
7 VIAddVersionKey /LANG=2052 "LegalCopyright"     "2014 China"
8 VIAddVersionKey /LANG=2052 "FileDescription"    "Demo01 安装程序"
9 VIAddVersionKey /LANG=2052 "FileVersion"        "1.0.0.0"

然后我们再次查看生成的安装包属性:

2)添加安装路径

通过设置InstallDir的值来设置默认安装路径:

1 /*
2 * 对于32位安装包,$PROGRAMFILES在32位系统下为Program Files,64位系统为Program Files (x86)
3 * 对于64位安装包,$PROGRAMFILES位Program Files,只能在64位系统下安装
4 * 我们这里制作的是32位安装包,如果要做64位的,加上这句"!define LIBRARY_X64"
5 */
6 InstallDir "$PROGRAMFILES\Demo01"

在Section中使用SetOutPath就可以在安装的时候创建目录了:

1 /*
2 * 设置安装包安装时的文件输出路径,$INSTDIR获取到的就是
3 * 我们上面设置的InstallDir路径,若目录不存在,则创建
4 */
5 SetOutPath "$INSTDIR"

完整代码如下:

 1 ; 安装包详细信息,更多信息可以查看帮助文档,安装目录下的NSIS.chm文件
 2 ; VIProductVersion是必须的,其他则可以根据需要来选择
 3 VIProductVersion "1.0.0.0"
 4 VIAddVersionKey /LANG=2052 "ProductName"        "Demo01"
 5 VIAddVersionKey /LANG=2052 "CompanyName"        "MyCompany"
 6 VIAddVersionKey /LANG=2052 "ProductVersion"     "1.0.0.0"
 7 VIAddVersionKey /LANG=2052 "LegalCopyright"     "2014 China"
 8 VIAddVersionKey /LANG=2052 "FileDescription"    "Demo01 安装程序"
 9 VIAddVersionKey /LANG=2052 "FileVersion"        "1.0.0.0"
10
11 ; 输出文件的名字,必须写.exe后缀,不然无法打开
12 OutFile "Demo01.exe"
13
14 /*
15 * 对于32位安装包,$PROGRAMFILES在32位系统下为Program Files,64位系统为Program Files (x86)
16 * 对于64位安装包,$PROGRAMFILES位Program Files,只能在64位系统下安装
17 * 我们这里制作的是32位安装包,如果要做64位的,加上这句"!define LIBRARY_X64"
18 */
19 InstallDir "$PROGRAMFILES\Demo01"
20
21 ; 必须至少有一个Section,可以没有名字
22 ; 这里我们的Section名字为"StartSec",内容只有一行,弹出一个对话框
23 Section StartSec
24     MessageBox MB_OK "My First NSIS Demo!"
25
26     /*
27     * 设置安装包安装时的文件输出路径,$INSTDIR获取到的就是
28     * 我们上面设置的InstallDir路径,若目录不存在,则创建
29     */
30     SetOutPath "$INSTDIR"
31 SectionEnd

3)添加卸载信息

一般的安装包是在安装的时候自动生成卸载程序(之后会介绍如何将安装包和卸载程序分成两个包来做)。

要生成卸载程序需要两步:

首先,要在StartSec(最初的Section)中使用WriteUninstaller来设置卸载程序的生产路径和名字,WriteUninstaller "$INSTDIR\uninst.exe"

然后,需要在程序中添加一个名字为Uninstall的Section作为卸载程序的入口。

完整代码如下:

 1 ; 安装包详细信息,更多信息可以查看帮助文档,安装目录下的NSIS.chm文件
 2 ; VIProductVersion是必须的,其他则可以根据需要来选择
 3 VIProductVersion "1.0.0.0"
 4 VIAddVersionKey /LANG=2052 "ProductName"        "Demo01"
 5 VIAddVersionKey /LANG=2052 "CompanyName"        "MyCompany"
 6 VIAddVersionKey /LANG=2052 "ProductVersion"     "1.0.0.0"
 7 VIAddVersionKey /LANG=2052 "LegalCopyright"     "2014 China"
 8 VIAddVersionKey /LANG=2052 "FileDescription"    "Demo01 安装程序"
 9 VIAddVersionKey /LANG=2052 "FileVersion"        "1.0.0.0"
10
11 ; 输出文件的名字,必须写.exe后缀,不然无法打开
12 OutFile "Demo01.exe"
13
14 /*
15 * 对于32位安装包,$PROGRAMFILES在32位系统下为Program Files,64位系统为Program Files (x86)
16 * 对于64位安装包,$PROGRAMFILES位Program Files,只能在64位系统下安装
17 * 我们这里制作的是32位安装包,如果要做64位的,加上这句"!define LIBRARY_X64"
18 */
19 InstallDir "$PROGRAMFILES\Demo01"
20
21 ; 必须至少有一个Section,可以没有名字
22 ; 这里我们的Section名字为"StartSec",内容只有一行,弹出一个对话框
23 Section StartSec
24     MessageBox MB_OK "My First NSIS Demo!"
25
26     /*
27     * 设置安装包安装时的文件输出路径,$INSTDIR获取到的就是
28     * 我们上面设置的InstallDir路径,若目录不存在,则创建
29     */
30     SetOutPath "$INSTDIR"
31
32     ; 这是卸载程序的生成路径
33     WriteUninstaller "$INSTDIR\uninst.exe"
34 SectionEnd
35
36 ; 若要生成卸载程序,必须要有一个名字为Uninstall的Section作为卸载程序的入口
37 Section Uninstall
38
39 SectionEnd

4)添加应用程序文件

这一步非常简单,只需要将要安装的文件安装路径添加到安装包里就可以了,我们以宏的形式来做(后面讲为什么不用函数),代码如下:

1 !macro CpFiles
2     SetOutPath "$INSTDIR"
3     File "Files\test.txt"
4 !macroend

调用的时候使用:!insertmacro CpFiles

5)添加桌面和开始菜单快捷方式

现在来添加快捷方式,用函数来实现,如下:

 1 Function CreateShoutCut
 2     ; 写为all表示将快捷方式写入所有用户的共享目录,这样每个用户都可以看见快捷方式
 3     ; 写为current表示将快捷方式写入当前用户目录,只有当前用户可以看到
 4     ; 通过打印$SMPROGRAMS的值就可以看到路径,这里就不列出了
 5     SetShellVarContext all
 6
 7     ; 为快捷方式创建目录,必须写绝对路径
 8     CreateDirectory "$SMPROGRAMS\Demo01"
 9
10     /*
11     * 以下是开始菜单和桌面快捷方式的设置
12     * 名字为"启动Demo01",关联文件为test.txt,生成后就可以通过快捷方式打开test.txt了。
13     * 同理,卸载快捷方式名字为"卸载Demo01",关联文件为uninst.exe,卸载的内容已经都写
14     * 到Uninstall的Section中了,在生成uninst.exe时将内容写入其中。
15     * CreateShortCut更详细的使用请查看帮助文档。
16     */
17     ; 开始菜单快捷方式
18     CreateShortCut "$SMPROGRAMS\Demo01\启动Demo01.lnk" "$INSTDIR\test.txt" "" ""
19     CreateShortCut "$SMPROGRAMS\Demo01\卸载Demo01.lnk" "$INSTDIR\uninst.exe" "" ""
20
21     ; 桌面快捷方式
22     CreateShortCut "$DESKTOP\启动Demo01.lnk" "$INSTDIR\test.txt" "" ""
23 FunctionEnd

调用时用Call命令:Call CreateShoutCut

6)完整的demo01代码附件

这样我们的第一个NSIS安装包Demo就完成了,下面给出完整demo代码:

(由于程序中多次用到”Demo01”,因此我们可以用一个宏定义来替代,这里为了明确每个地方的字符串具体内容,所以没有使用宏)

运行该代码时需要在代码文件的当前目录创建Files文件夹,文件夹里创建test.txt文件,然后用makensis.exe就可以生成Demo01.exe安装包了。

; ------------------------------------------------------------ ;
; File:        demo01.nsi
; Author:      laoma
; Date:        2015-03-27
; ------------------------------------------------------------ ;

; 安装包详细信息,更多信息可以查看帮助文档,安装目录下的NSIS.chm文件
; VIProductVersion是必须的,其他则可以根据需要来选择
VIProductVersion "1.0.0.0"
VIAddVersionKey /LANG=2052 "ProductName"        "Demo01"
VIAddVersionKey /LANG=2052 "CompanyName"        "MyCompany"
VIAddVersionKey /LANG=2052 "ProductVersion"     "1.0.0.0"
VIAddVersionKey /LANG=2052 "LegalCopyright"     "2014 China"
VIAddVersionKey /LANG=2052 "FileDescription"    "Demo01 安装程序"
VIAddVersionKey /LANG=2052 "FileVersion"        "1.0.0.0"

; 输出文件的名字,必须写.exe后缀,不然无法打开
OutFile "Demo01.exe"

/*
* 对于32位安装包,$PROGRAMFILES在32位系统下为Program Files,64位系统为Program Files (x86)
* 对于64位安装包,$PROGRAMFILES位Program Files,只能在64位系统下安装
* 我们这里制作的是32位安装包,如果要做64位的,加上这句"!define LIBRARY_X64"
*/
InstallDir "$PROGRAMFILES\Demo01"

!macro CpFiles
    SetOutPath "$INSTDIR"
    File /r "Files\test.txt"
!macroend

; 必须至少有一个Section,可以没有名字
; 这里我们的Section名字为"StartSec",内容只有一行,弹出一个对话框
Section StartSec
    /*
    * 设置安装包安装时的文件输出路径,$INSTDIR获取到的就是
    * 我们上面设置的InstallDir路径,若目录不存在,则创建
    */
    SetOutPath "$INSTDIR"

    ; 调用宏来拷贝文件,安装的时候会将拷贝的文件写到安装路径下
    !insertmacro CpFiles

    ; 这是卸载程序的生成路径
    WriteUninstaller "$INSTDIR\uninst.exe"

    ; 创建快捷方式
    Call CreateShoutCut
SectionEnd

; 若要生成卸载程序,必须要有一个名字为Uninstall的Section作为卸载程序的入口
Section Uninstall
    ; 删除快捷方式
    SetShellVarContext all
    Delete "$DESKTOP\启动Demo01.lnk"
    Delete "$SMPROGRAMS\Demo01\卸载Demo01.lnk"
    Delete "$SMPROGRAMS\Demo01\启动Demo01.lnk"
    RMDir "$SMPROGRAMS\Demo01"

   ; 删除文件
    Delete /REBOOTOK "$INSTDIR\test.txt"
    Delete /REBOOTOK "$INSTDIR\uninst.exe"

    ; 删除安装目录
    RMDir "$INSTDIR\Demo01"
SectionEnd

Function CreateShoutCut
    ; 写为all表示将快捷方式写入所有用户的共享目录,这样每个用户都可以看见快捷方式
    ; 写为current表示将快捷方式写入当前用户目录,只有当前用户可以看到
    ; 通过打印$SMPROGRAMS的值就可以看到路径,这里就不列出了
    SetShellVarContext all

    ; 为快捷方式创建目录,必须写绝对路径
    CreateDirectory "$SMPROGRAMS\Demo01"

    /*
    * 以下是开始菜单和桌面快捷方式的设置
    * 名字为"启动Demo01",关联文件为test.txt,生成后就可以通过快捷方式打开test.txt了。
    * 同理,卸载快捷方式名字为"卸载Demo01",关联文件为uninst.exe,卸载的内容已经都写
    * 到Uninstall的Section中了,在生成uninst.exe时将内容写入其中。
    * CreateShortCut更详细的使用请查看帮助文档。
    */
    ; 开始菜单快捷方式
    CreateShortCut "$SMPROGRAMS\Demo01\启动Demo01.lnk" "$INSTDIR\test.txt" "" ""
    CreateShortCut "$SMPROGRAMS\Demo01\卸载Demo01.lnk" "$INSTDIR\uninst.exe" "" ""

    ; 桌面快捷方式
    CreateShortCut "$DESKTOP\启动Demo01.lnk" "$INSTDIR\test.txt" "" ""
FunctionEnd
时间: 2024-08-25 10:33:36

NSIS打包(二)第一个安装包的相关文章

java程序打包jre以及制作安装包

分享一篇文章: java程序打包jre以及制作安装包 传智&黑马咨询郑老师 java程序打包jre以及制作安装包Java的桌面程序写好以后只能在eclipse下运行是不可以的,还需要将程序拷贝到其他电脑上运行才可以,所以需要制作成其他电脑可以运行的文件,当然在安装有jdk的电脑上只需要将程序导出为jar文件就可以运行了,但是除了开发java程序人员的电脑上会安装jdk,其他人的电脑上不会有这个环境,所以还需要将java可运行的环境一同打包到程序中去,这样,在用户不安装jdk的情况下也可以运行.制

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

阅读目录 一.配置安装包依赖项 二.自定义dll(测试数据库连接) 三.总结 正文 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起来是相对比较简单的,只要知道了博主提供的方法,相信都不是问题,其实博主当初寻找相关方法配置IIS和Web.config的时候也是费了九牛二虎之力的,毕竟资料太少,只能各种方式挨个尝试一遍,解决问题之后回过头来看,发现

打包文件到APK安装包中

目的:将配置文件或SQLITE打包进APK中 1.首先,打开菜单 Project - Deployment 2.点击添加按钮,选择要添加的文件(文件最好放在工程目录中,这样,即使该工程在其他电脑上打开,也能找到该文件) 3.修改Remote Path: 当开发Android程序时,Remote Path修改为 assets\internal\ 当开发iOS程序时,Remote Path修改为 StartUp\Documents Remote Path说明 Remote Path写入assets\

Sencha学习笔记2:打包您的第一个Sencha安卓应用apk安装包

通过上一篇翻译的官方文章的介绍我们对sencha有了初步的印象,同时我们也通过该向导生成了第一个示例应用代码框架,那么下一步可能很多人都觉得应该根据该向导所提示的去看一下一个应用是如何建立起来的详细信息了,但我认为可以换一下学习的路径. 天地会珠海分舵是一个比较急功近利的人,所以有了第一个自动生成的代码示例后,他是比较急于想知道应该如何将该示例打包成一个安卓的apk安装包来安装到目标安卓机器上.刘备做得好,得陇就应该望蜀,做人还是有点追求的好. 下面我们就尝试通过一个HelloWorld的示例来

c# 编写windows 服务,并制作安装包

对服务的认识有很多个阶段. 第一阶段:当时还在用c++,知道在一个进程里while(True){},然后里面做很多很多事情,这就叫做服务了,界面可能当时还用Console控制台程序. 第二阶段:知道了服务要在后台执行,一般不会有界面显示,并且开机自启动,于是隐藏Console控制台界面,并且通过使用SC CREATE 将exe变为服务,并且达到开机自启动的目的.这时候还是c++ 阶段. 第三阶段:因项目需求接触c#,发现有个叫项目模板专门制作windows 服务,尝试了下,感觉还不错,省事了许多

堡垒机阿里云安装包安装

阿里云版本开源堡垒机可以加QQ群 548258314 在群文件中下载   一.阿里云或其它系统Centos系统安装   在阿里云上建立CentOS 7.1版本的虚机. 如果是在自己服务器上装的centos 7.1版本,只需要用最小安装即可(不要选择其它安装包) 二.堡垒机安装包使用: 堡垒机安装包要安装很多堡垒机需要的rpm包,因此,在安装堡垒机软件前,需要保证与公网连接,并且设置好DNS. 登录到堡垒机后台,运行命令: mkdir  -p /tmp/test/soft 将centos7.tar

Ubuntu制作离线安装包

一.应用场景 Ubuntu在不能上网情况下,又需要安装软件或更新系统 二.离线安装包制作 在一台能正常上网的Ubuntu系统上,安装需要的软件包 $sudo apt-get -d install XXX 安装完成后,此时软件已经下载到了/var/cache/apt/archives目录下. 生成依赖关系 新建目录 $sudo mkdir /root/OfflinePackage 拷贝deb软件包到上新建的目录 $sudo cp -r /var/cache/apt/archives /root/O

堡垒机-麒麟开源堡垒机阿里云安装包发布

阿里云版本开源堡垒机可以加QQ群452104868 在群文件中下载 一.阿里云Centos系统安装 在阿里云上建立Centos 7.1版本的虚机. 二.堡垒机安装包使用: 堡垒机安装包要安装很多堡垒机需要的rpm包,因此,在安装堡垒机软件前,需要保证与公网连接,并且设置好DNS. 登录到堡垒机后台,运行命令: mkdir  -p /tmp/test/soft 将centos7.tar.gz 上传到系统 /tmp/test/soft目录 cd /tmp/test/soft tar xpvf  ce

ubuntu 下解决安装包依赖问题

我们用banshee软件安装豆瓣插件来做个示例: 1.首先在Ubuntu Software Center内搜索banshee播放器 因为我之前已经安装好了,可以看到如下界面,你可以在点击该软件看到install选项,然后点击就可以了,点击之后需要你输入管理员密码,输入完成后就会自省安装,这一步比较简单 2.因为软件中心没有豆瓣插件,那么我们就去浏览器中搜索下载,我是在 https://bitbucket.org/pro711/banshee-doubanfm/downloads 下载的 3.下载