标签:
基本介绍完之后,我们大概了解了NSIS中有哪些组件,现在我们通过一个简单的demo来学习如何使用这些组件。
NSIS的环境非常简单,只有一个安装包,安装后即可使用。
官网:http://nsis.sourceforge.net/Main_Page,可以到这里下载最新的安装包,也有一些demo可以学习。
安装完之后,将安装目录添加到系统环境变量就可以正常使用了。(也可以将安装目录拷贝到要使用的地方)
这里我们使用的版本是v3.0b1
以下是一个最简单的安装包代码:
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 ; 安装包详细信息,更多信息可以查看帮助文档,安装目录下的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"
然后我们再次查看生成的安装包属性:
通过设置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
一般的安装包是在安装的时候自动生成卸载程序(之后会介绍如何将安装包和卸载程序分成两个包来做)。
要生成卸载程序需要两步:
首先,要在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
这一步非常简单,只需要将要安装的文件安装路径添加到安装包里就可以了,我们以宏的形式来做(后面讲为什么不用函数),代码如下:
1 !macro CpFiles 2 SetOutPath "$INSTDIR" 3 File "Files\test.txt" 4 !macroend
调用的时候使用:!insertmacro CpFiles
现在来添加快捷方式,用函数来实现,如下:
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
这样我们的第一个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
标签:
原文地址:http://www.cnblogs.com/mhscn/p/4374249.html