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

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

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

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

        接下来我们需要将用到的基础Qt链接库放在这个目录下(如果是别的软件用了其它Qt库也都需要拷贝过来),可以在(...\Qt\Qt5.15.2\5.15.2\msvc2019_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)https://github.com/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工程里本身就没有为可执行文件加载图标(上一篇文章忘了加这一步= - =),读者可以自行搜索如何为可执行文件添加图标,方法非常简单。

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

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NSIS安装包制作教程 分为三个目录:基础,插件,脚本 NSIS System 插件 NSIS VPatch 3.1插件 NSIS InstallOptions 2 插件 NSIS Modern UI(新式用户界面)插件 NSIS的Modern UI插件 NSIS里特殊符号的表达方法 两组件互斥 NSIS 常用小问题合集 资源替换式的美化包制作方式代码 安装完毕后如何刷新文件关联 教你如何编程调用 NSIS 的插件 NSIS安装程序概要 实现 NSIS 自定义页面中的控件操作代码 如何使用NSIS实现多目录安装设置 如何用NSIS在加入注册表 用NSIS 制作自己的安装程序 bluewind 的 wmp9 nsis安装脚本 NSIS安装脚本简明教程 取得winamp的NSIS脚本的教程 迅雷5.7.3.389 AYU增强版的安装脚本 NSIS制作迅雷安装的脚本 迅雷5.7.2.371 DDR1.5版去广告版源代码说明 NSIS删除安装程序自身 帮助文件中关于静默安装的说明 NSIS实现静默安装的两种方法 nsis的附加任务代码 关于 NSIS 写入注册表的问题 少轻狂制作的Windows优化大师的安装脚本 aipc编写的nsis极点安装脚本 官方 NSIS 插件全集 全方位掌握NSIS的使用 NSIS语言里怎样安装一个.inf文件? 如果要关联某个文件给程序应该怎么做? 如何避免显示解压缩进度框? 关于检测操作系统的问题 在结束页面添加运行程序选项 NSIS的botton二选一如何实现? NSIS灵活应用用逻辑库 NSIS调用inf安装驱动后的卸载问题 NSIS的组件互斥代码 在NSIS中如何禁止一个组件组的父项的点击事件 关于打破 NSIS 的 8192 字节限制的更简单方法 NSIS 自定义页面结合组件选择安装 一个关于组件跟自定义页面的控制问题 如何把安装的卸载程序放到其他目录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值