使用Inno Setup将QT开发的软件制作成安装包(仅Windwos平台)

使用Inno Setup将QT开发的软件制作成安装包(仅Windwos平台)

前言

在使用QT完成软件开发后要把软件给别人使用,我之前是打包发布后直接弄成压缩包发给别人,但是接收的人就要通过解压软件解压才能使用软件,如果没有解压软件还要安装一个,就会比较麻烦。后面使用Enigma Virtual Box将软件打包成一个.exe文件,但是对方安装了流氓杀毒软件,老是报毒把我的软件删掉,所以就想着直接整成安装包会不会稳妥一点,果然用安装包安装后基本没啥问题。下面我就将制作安装包的方法分享出来。

一、下载Inno Setup软件

官网:https://jrsoftware.org/
选择下载最新版本
在这里插入图片描述在这里插入图片描述
下载完后安装,一直Next就行了,可以改一下安装的路径。
安装完成后打开
在这里插入图片描述
如果要改成暗色主题和显示行号的话可根据以下操作:
在这里插入图片描述
在这里插入图片描述

二、Inno Setup创建安装包脚本

在菜单栏中选择 File -> New…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装路径选择Program Files folder时,安装时候的默认路径就是一下两个文件夹,如果软件是64位的就推荐Program Files,32位就推荐Program Files (x86)
在这里插入图片描述
安装路径选择(Custom)时就可以自定义默认的安装路径
在这里插入图片描述
设置好后Next
在这里插入图片描述
选择了.exe文件后还要将其他文件添加进来,使用Add file(s)按钮添加文件,使用Add folder添加文件夹
以下是我的软件 windeployqt 打包发布后的目录,将除了.exe外的所有文件添加
在这里插入图片描述
在添加文件夹的时候还要进行以下操作:
在这里插入图片描述
在这里插入图片描述
如果不做这个操作,安装出来的就不会有文件夹,而是文件夹里的文件全部跑到根目录了
全部设置好后Next
这个是设置某些文件默认用你的软件打开,如果你的软件是什么编辑器的话就要设置,由于我的软件不是这类型的所以就不勾选了
在这里插入图片描述
在这里插入图片描述
这里可以都不选,如果是公司的软件可能有要求
在这里插入图片描述
在这里插入图片描述
选择安装时的语言,官方是默认没有简体中文的,需要下载中文依赖,不过github国内访问老是抽风
地址: https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation
下载好后把ChineseSimplified.isl文件放在Inno Setup软件目录Language文件夹中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
是否马上编译脚本
在这里插入图片描述
是否在编译前保存脚本
在这里插入图片描述
保存脚本
在这里插入图片描述
保存后就开始编译了,会在刚才选的安装包路径中生成一个安装包,基本这个安装包就能够进行基本的安装了
在这里插入图片描述
在这里插入图片描述

三、优化

1. 安装包文件版权信息

在这里插入图片描述
在脚本中添加

AppCopyright={#MyAppPublisher}

在这里插入图片描述
再次编译后
在这里插入图片描述

2. 判断软件是否已在本地安装

使用安装包安装后会在本地注册表注册一些信息,我们可以通过这些信息判断是否安装过软件以及版本是升级还是下降
写在注册表的文件名称是通过AppId这个属性决定的,我们可以自定义AppId,只要保证和其它软件不重复就行
在这里插入图片描述
现在我们试下重新编译并且安装软件,然后查看注册表
win + R打开运行窗口
在这里插入图片描述
然后找到这个目录计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\找到软件注册信息
在这里插入图片描述
现在我们要做的就是判断注册表是否有这个文件,如果没有则没有安装软件,如果有则提示用户已经安装过了并且通过获取DisplayVersion属性与安装包中版本对比,判断是升级软件,还是版本相同不需要重复安装。
在脚本中添加[Code]部分,大概逻辑是先判断注册表中是否存在AppId,没有就直接继续安装,如果存在则取出本地的版本与安装包的版本对比,如果版本一样则提示不需要重复安装,安装包的更新则提示是否升级,安装包的版本更低则提示是否降级。不过这样的话就会导致不能存在多个版本的软件,所以要看业务需求是怎样的。

[Code]
function InitializeSetup(): Boolean;
  var
    m_sVersion: String;
    m_lCompareResult: Integer;
  begin
      if RegKeyExists(HKLM, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1') then
      begin
        RegQueryStringValue(HKLM, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1', 'DisplayVersion', m_sVersion);
        m_lCompareResult := CompareStr('{#MyAppVersion}', m_sVersion);
        if m_lCompareResult < 0 then
        begin
           Result := MsgBox('检测到本地已安装 ' + m_sVersion + ' 版本,是否将软件版本降为 {#MyAppVersion}版本?', mbInformation, MB_YESNO) = IDYES;
        end
        else if m_lCompareResult = 0 then
        begin
           MsgBox('检测到本地已安装 ' + m_sVersion + ' 版本,无需再次安装。', mbInformation, MB_OK);
           Result := false;
        end
        else
        begin
           Result := MsgBox('检测到本地已安装 ' + m_sVersion + ' 版本,是否将软件版本升级为 {#MyAppVersion}版本?', mbInformation, MB_YESNO) = IDYES;
        end;
      end
      else
      begin
        Result := true;
      end;
  end;

这里用到了很多Inno Setup的api,想要深入了解的同志可以在以下网站中探索:
https://jrsoftware.org/ishelp/

四、参考资料

超棒小姐姐的Inno Setup教程 https://www.bilibili.com/video/BV15k4y1R7cL

结尾

Inno Setup还有很多功能,可以自定义更好看的安装界面,如果你的软件需要其他环境依赖的,还可以在安装前检测本地环境是否符合,然后安装的依赖。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1594231563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值