1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【C++/Qt/NSIS】软件打包与自定义安装包制作

【C++/Qt/NSIS】软件打包与自定义安装包制作

时间:2018-07-30 14:08:57

相关推荐

【C++/Qt/NSIS】软件打包与自定义安装包制作

上一篇文章中我们完成了一个点灯的益智小游戏(童年益智小游戏-点灯),今天我们来尝试将它打包并制作一个安装包。效果如下:

首先将我们的工程打包,在上一篇文章中我们建立并完成了小游戏的VS工程,现在首先来生成一下Release版本的可执行文件,并将它拷贝到一个文件夹中。

我们的图标和logo资源已经在程序中进行了加载,所以不需要做任何操作,但是请注意,如果软件资源较多并且后续可能需要更换资源的话,这种方式需要修改程序重新生成可执行文件,比较复杂,可以考虑使用动态加载资源的方式,参考:Qt动态加载资源_qt 加载资源_贝勒里恩的博客-CSDN博客

接下来我们需要将用到的基础Qt链接库放在这个目录下(如果是别的软件用了其它Qt库也都需要拷贝过来),可以在(...\Qt\Qt5.15.2\5.15.2\msvc_64\bin)这个路径下找到

为了防止出现找不到Qt平台的报错,我们还需要把Qt插件文件夹中的platform文件夹拷贝过来,为了我们的软件能够正常加载除了基础图片格式png以外的其它图片格式(比如我们的logo是一个gif),还需要拷贝同路径下的imageformats文件夹。

点击exe文件测试我们的软件使用正常,资源加载也正常,至此打包步骤完成。值得一提,除了上述的手动打包方式,也可以使用windeployqt命令,即在qt自带的命令窗

中, 使用windeployqt xxx.exe的方式进行自动打包,但也有一些坑,具体的各位读者可以自行搜索。

至此打包过程结束,接下来我们尝试将软件制作为安装包。

首先下载NSIS-UI-Plugin-master第三方库,GitHub地址:GitHub - sway913/NSIS-UI-Plugin: Create NSIS Modern UI Setup by Using Thirdparty UI Library(such as Qt, DuiLib)/sway913/NSIS-UI-Plugin 读者可先自行阅读里面的readme文件,使用步骤都在里面,要注意的点笔者会在下面依次列出。

首先下载NSIS软件并安装,添加环境变量NSIS_DIR为NSIS安装目录,这一步没有什么注意点,随着NSIS软件一起下载的可视化界面也可以实现简单的安装包制作,但是没有自定义风格的功能,这里我们只借助它的库即可。

打开上面通过GitHub下载的NSIS-UI-Plugin-master工程,切换平台为x86

貌似是官方还不支持x64版本,总之不用管,x86调通之后肯定能用。

在编译工程之前我们还需要在这个工程内部修改安装界面为我们喜欢的风格:

MainPage.ui文件为我们安装包的显示界面,我们可以在上面修改增删控件

main.css中可以加载我们自己的资源,语法是css,但是这里用到的都比较简单,资源文件放在NSIS-UI-Plugin-master\NSIS-UI-Plugin\Resources目录下即可,我们这里是单独放在DefaultTheme文件夹下。此外也可以修改工程本身的资源文件,方式和我们上一篇文章中所述一致。

以上是控件和资源相关的内容,功能上我们也可以做一些小的修改,增加代码鲁棒性,比如不勾选同意协议的话我们就将开始安装的按钮改为灰色风格并无法进行下一步安装。

此外注意,我们安装时生成的卸载脚本uninst.exe,会将它所在路径下的文件全部删除,所以一定要保证用户将软件安装在一个空路径下才能提供下一步的安装(或者自动创建空文件夹往里面安装也是一种思路,这里笔者用的是前者方法)。

再比如将首页的用户许可协议几个字设为超链接,点击后直接打开尾页的用户许可协议,并可以使用户阅读完后返回首页。

诸如此类可开发的功能还有很多,留给读者慢慢探索。

至此我们已经修改完了安装包界面相关的内容,除了上述提到的文件外,其它文件建议不做任何修改,直接生成工程,Debug或Release均可,推荐Release。但如上文所述,一定要选择x86平台,因为官方(目前为止)只支持32位。

生成解决方案成功后会在NSIS-UI-Plugin-master\NSIS-UI-Plugin\Win32\路径下生成对应的NSIS-UI-Plugin.dll

如果生成失败报错了,但仍然在上述路径下生成了该文件,则说明是前面的NSIS环境变量设置有问题,此时可以手动将该文件拷贝到:NSIS安装路径\Plugins\x86-unicode

的位置,并改名,如下图所示(注意文件大小和修改日期,其实就是上面那个文件,如果环境变量添加正确,这一步会自动完成)

有了NSIS插件下的这个文件,我们后续使用打包脚本就可以直接调用使用它了,不过在此之前我们还需要提供一个python环境,保证能够运行NSIS-UI-Plugin-master路径下的NsisScriptGenerate.py文件,任意一个python环境只要能跑起来都可以,不用新建一个环境,要注意该文件默认使用python2写的,如果你的python环境是python3,那么需要将该文件中的所有print函数修改为python3的格式。

完成了以上工作后,就只剩最后一步了,请读者坚持一下,马上就可以看到我们自己的安装包了。我们来到NSIS-UI-Plugin-master\VimeoSetup路径下,可以看到vimeo.nsi和vimeo-template.nsi两个脚本文件,其中vimeo.nsi是NSIS自带的原始脚本,vimeo-template.nsi是根据vimeo.nsi生成的一个例程,我们需要修改后者,打开vimeo-template.nsi文件,

开头的几个宏定义都是我们需要修改的,分别对应了安装后软件的名字、快捷方式对应的可执行文件、可执行文件和卸载脚本的图标等。这个脚本中其它内容的作用及NSIS脚本的语法知识可以参考网上的教程,比如这个系列NSIS介绍_51CTO博客_nsis

注意上述脚本中填写的exe路径是以安装后的路径下为基准的,比如你可以把exe文件放在一个bin文件夹下,也可以像我这样直接放在安装根目录下,上述的对应位置都要作修改,另外相应的图标ico文件也需要读者自己去制作(网上有在线的图片转ico工具)。

接下来我们就可以直接运行该路径下的build-setup.bat脚本(默认使用release版本,另一个带debug的bat文件对应的是debug版本),开始制作安装包了,打开NSIS脚本如下图后,如果最终如下图所示只有警告没有报错,那么恭喜你,已经成功制作了安装包。

如果这个界面出现了报错,或者生成的安装包点击闪退,就说明前面的步骤存在错误,比如

QT的环境变量没有添加正确,或者没有使用32位平台生成NSIS-UI-Plugin的链接库。具体可以NSIS脚本界面中的报错信息来判断。

最终我们就成功制作了上一篇文章中写的小游戏的安装包并完成了安装,打开安装的目录,内容如下:

注意这里的可执行文件LightGame.exe没有图标不是安装包的问题,是我们在原Qt工程里本身就没有为可执行文件加载图标(上一篇文章忘了加这一步= - =),读者可以自行搜索如何为可执行文件添加图标,方法非常简单。

感谢各位读者看到这里,我们下一篇文章再见。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。