您的位置:首页 > 编程语言 > Qt开发

[NSIS]NSIS——Qt程序发布工具

2016-03-16 20:51 691 查看
平台:Windows10家庭中文版 x64

环境:NSIS 2.50

参考资料:

1、《2.31.2 使用NSIS(Nullsoft Install System)》 —— http://book.51cto.com/art/201003/188297.htm

另外,NSIS有帮助手册,看一下就可以明白的,这个才是最好的参考资料。

写在开头

又重新用Qt写了一个测试软件,绕不开的Qt软件发布问题又遇上了。经历了上次花了很长的时间去编译静态库的问题后,现在这个电脑,没有编译过静态库。就尝试用动太库的方式来发布了,于是就重新来查看我以前写的少数几遍博文。没想到,竟然有些不太懂的地方,又花费了不少时间去打包和发布。因此,重新丰富一下这个工具的教程吧!

如此,作此文。

准备工作

1、首先,你还是得有个NSIS工具了。https://sourceforge.net/projects/nsis/

2、准备一个文件夹。还是准备一个文件夹吧!将所有你需要打包的东西,都放在这个文件夹下面。

3、将NSIS工具需要的文件,也放在上边的文件夹里。这里NSIS文件包含这几个文件:NSIS脚本文件(*.nsi)、发布声名文件(License.txt)、图片文件(*.bmp)。这些文件都是必需的,具体有什么做用,下文说明。

下面开始正文吧!

一、NSIS脚本文件(*.nsi)

NSIS是一款“按脚本文件配置”打包的工具。新装好的软件,自然无处找这个脚本文件了。下边推荐一个我自己用过几次了的脚本文件,只需要将以下的内容保存成*.nsi文件,然后根据注释修改对应的内容就好了。

;NSIS Modern User Interface
;Header Bitmap Example Script
;Written by Joost Verburg

;--------------------------------
;Include Modern UI

!include "MUI2.nsh"

;--------------------------------
;General

;Name and file
Name "USBConfig"    ---- 程序名,该名称需要与后面的相应内容一致,修改时不要忘了
OutFile "Setup.exe"    ---- 生成的目标文件名

;Default installation folder
InstallDir "$PROGRAMFILES\USBConfig"
---- 安装的目标文件夹名称,这里要将前缀改成$ProgramFiles,不然会装到其它路经,不用担心64bit平台上目标目录的问题
---- $PROGRAMFILES是NSIS的环境变量,会自动映射到C:\Program Files或64平台的C:\Program Files (x86)目录下

;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\USBConfig" ""    ---- 这里是安装注册表的目录,修改对应名称,若是不想要安装注册表内容,则注释掉这行,还以后对的应该删除行

;Request application privileges for Windows Vista
RequestExecutionLevel user

;--------------------------------
;Interface Configuration

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "win.bmp" ; optional    ---- 这里就用到了图片文件,是在生成的Setup.exe文件里的图标
!define MUI_ABORTWARNING

;--------------------------------
;Pages

!insertmacro MUI_PAGE_LICENSE "License.txt"    ---- 这里就用到了License文件,我试过不用,但好像不行
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

;--------------------------------
;Languages

!insertmacro MUI_LANGUAGE "SimpChinese"    ---- 语言版本,没太研究,好像是控制安装程序安装过程中的显示语言为中文。一般不用处理

;--------------------------------
;Installer Sections

Section "Application and Help(required)" SecDummy    ---- 安装的第一部分内容,用Section来划分,这里的内容是程序的内容

SetOutPath "$INSTDIR"

;ADD YOUR OWN FILES HERE...
File "USBConfig.exe"    ---- 添加要打包进去的文件。这里不需要打包win.bmp,若是打包进去,安装后在安装目录下也会有win.bmp文件
File "License.txt"
File "libusb0.dll"
File /r "Driver"    ---- 添加文件夹的方法,需要参数/r。文件夹添加好,文件夹下对应的文件则同时也会被添加进去

;Store installation folder
WriteRegStr HKCU "Software\USBConfig" "" $INSTDIR    ---- 这里是控制安装注册表,不需要则注释掉

;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"     ---- 这里是生成卸载程序

SectionEnd

;--------------------------------
;Descriptions

;Language strings
LangString DESC_SecDummy ${LANG_ENGLISH} "Application and Help(required)"    ---- 这里是语言配置,没有太研究。一般不用处理

;Assign language strings to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

;--------------------------------
; Optional section (can be disabled by the user)
Section "StartMenu ShortCuts"    ---- 安装的第二部分,同样用Section来划分,这里的内容是添加“开始菜单”的菜单项

CreateDirectory "$SMPROGRAMS\USBConfig"    ---- 开始菜单中安装的目录
CreateShortCut "$SMPROGRAMS\USBConfig\USBConfig.lnk" "$INSTDIR\USBConfig.exe" "" "$INSTDIR\USBConfig.exe" 0    ---- 目录中的快捷选项
CreateShortCut "$SMPROGRAMS\USBConfig\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0

SectionEnd

;--------------------------------
; Optional section (can be disabled by the user)
Section "Desktop ShortCuts"    ---- 安装的第三部分,同样用Section来划分,这里的内容是添加“桌面”的快捷方式

CreateShortCut "$DESKTOP\USBConfig.lnk" "$INSTDIR\USBConfig.exe" "" "$INSTDIR\USBConfig.exe" 0
---- DESKTOP为NSIS的环境变量,会映射到系统桌面
SectionEnd

;--------------------------------
;Uninstaller Section
Section "Uninstall" ---- 这里是控制卸载程序工作的内容

;ADD YOUR OWN FILES HERE...
Delete "$INSTDIR\Uninstall.exe" ---- 卸载时应该删除的文件,需要保留这一项
Delete "$INSTDIR\USBConfig.exe"
Delete "$INSTDIR\License.txt"
Delete "$INSTDIR\libusb0.dll"

RMDir /r "$INSTDIR\Driver" ---- 卸载时应该删除的目录, /r参数是强制删除,不管其目录下是否有文件存在。删除文件夹时自动删除其下的文件
RMDir "$INSTDIR" Delete "$SMPROGRAMS\USBConfig\USBConfig.lnk" ---- 卸载时删除开始菜单中的快捷选项

Delete "$SMPROGRAMS\USBConfig\Uninstall.lnk"
Delele "$DESKTOP\USBConfig.lnk" ---- 卸载时删除桌面快捷方式

RMDir "$SMPROGRAMS\USBConfig" ---- 卸载时删除开始菜单中的目录

DeleteRegKey /ifempty HKCU "Software\USBConfig" ---- 卸载时删除安装时安装的注册表内容,不需要时注释掉
SectionEnd

主要修改部分:

1、需要打包的文件及文件夹。文件夹添加进去了就行,NSIS会自动包含文件夹下的文件,而不需要再特意添加一遍。

2、需要发布的软件文件名。这个名字需要与后面创建快捷方式,删除文件名等同步起来。不然创建快捷方式和卸载时,会出现创建失败或者删除不完的问题。

3、需要生成的发布软件文件名。

保存好后,该文件就是我们用来打包的脚本文件了。脚本中有提到两个文件,即是准备工作3中的后两个文件。

一个是License.txt文件,这个文件是用做软件发布声明的文件,是必需文件。所以我们也先找个样版。在NSIS安装目录“NSIS\Docs\NSISdl\”下有一个License.txt文件,拷贝过来后,根据相关意思改写一下内容即可,不改,当然也能用咯!

另一个是win.bmp文件。这个文件也是必需的,也可以在NSIS安装目录“NSIS\Contrib\Graphics\Header\”下而找到。就用其中的win.bmp文件最好,因为此图片有个尺寸的要求(150x570)。该图片用于生成发布软件后,安装过程中,软件上会有一张图片,如下红框示:



上图中绿色框中,即为License.txt声明文件中的内容。

二、运行脚本、生成发布软件

有了上面的准备工作,接下来的就是运行脚本文件来打包生成发布软件了。如下图示,打开NSIS,选择 “Compiler NSI scripts”:



弹出脚本编译窗口,打开脚本文件,如下图示:



脚本文件一旦调入,即立刻会进行脚本文件编译。如下图示:



图中大框为编译过程结果。一般情况下,编译总会遇上些错误,错误会提示出脚本文件多少行有问题,然后去对应修改相应行的内容就好了。不太难的,花点心思就好了。编译成功后,窗口标题栏上会出现“Finished Successfully”,即代表成功了,在文件夹下,会生产脚本配置好的输出文件。

这下,快去查看吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NSIS Qt打包 发布