Qt 把.exe打包成安装文件形式

目录

  • 1.下载工具 Qt Installer Framework
  • 2.将`bin`文件添加到环境变量
  • 3.拷贝`startmenu`示例-备用
  • 4.准备Qt Release打包好的程序
  • 5.把Release打包好的程序放到`packages\org.qtproject.ifw.example\data`文件夹下
  • 6.生成安装包
  • 7.修改安装包图标
  • 8.修改主程序程序安装引导-创建快捷键
  • 9.添加驱动安装包
  • 10.嫌弃打包耗时太长?

Qt Installer Framework 使用

1.下载工具 Qt Installer Framework

官网下载链接
下载直接安装
在这里插入图片描述

2.将bin文件添加到环境变量

在这里插入图片描述

3.拷贝startmenu示例-备用

在这里插入图片描述

4.准备Qt Release打包好的程序

确保自己的.exe能够正常运行,没有缺少dll文件
在这里插入图片描述

5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下

在这里插入图片描述

6.生成安装包

回到startmenu目录下,打开CMD终端,执行指令

binarycreator --offline-only -c config/config.xml -p packages install.exe -v

脚本程序生成脚本.bat

@echo off
start cmd /k "binarycreator --offline-only -c config/config.xml -p packages install.exe -v"

在这里插入图片描述

在这里插入图片描述
不出意外,正常生成安装包,双击即可安装
在这里插入图片描述

7.修改安装包图标

在这里插入图片描述
startmenu\config文件夹下准备3张图片

在这里插入图片描述
修改startmenu\config\config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Installer><Name>软件名称</Name><!-- 软件名称 --><Version>0.1.3</Version><!-- 版本号 --><Title>安装程序窗口标题</Title><!-- 安装程序窗口标题 --><Publisher>公司名称</Publisher><!-- 公司名称 --><!-- Directory name is used in component.xml --><StartMenuDir>Ancel IR</StartMenuDir><!-- 要生成的windows开始菜单目录 --><TargetDir>@HomeDir@/APPPath</TargetDir><!-- 默认安装路径 --><Logo>logo.png</Logo><InstallerApplicationIcon>app</InstallerApplicationIcon><!-- app.ico,但是不要ico后缀 --><InstallerWindowIcon>app.png</InstallerWindowIcon>
</Installer>

重新生成后,安装过程中引导语,图标就是我们自定义的了
在这里插入图片描述
在这里插入图片描述

8.修改主程序程序安装引导-创建快捷键

修改文件packages\org.qtproject.ifw.example\meta\package.xml

<?xml version="1.0" encoding="UTF-8"?>
<Package><DisplayName>主程序</DisplayName><Description>主程序描述.</Description><Version>1.0.0-1</Version><ReleaseDate>2013-01-01</ReleaseDate><Default>true</Default><Script>installscript.qs</Script>
</Package>

在这里插入图片描述
创建快捷键
修改文件packages\org.qtproject.ifw.example\meta\installscript.qs

function Component()
{// default constructor
}Component.prototype.createOperations = function()
{component.createOperations();//开始菜单的快捷方式component.addOperation("CreateShortcut","@TargetDir@\\debug.exe","@StartMenuDir@\\debug.lnk","workingDirectory=@TargetDir@","description=Open Application");//桌面快捷方式component.addOperation("CreateShortcut","@TargetDir@\\debug.exe","@DesktopDir@\\debug.lnk","workingDirectory=@TargetDir@","description=Open Application");
}

在这里插入图片描述

9.添加驱动安装包

这里以安装CH340串口驱动为例
把原来的org.qtproject.ifw.example拷贝一份,重命名为driver
在这里插入图片描述
把ch340驱动程序放到packages\driver\data目录下
在这里插入图片描述
在这里插入图片描述
修改文件packages\driver\meta\installscript.qs

function Component()
{// default constructor
}Component.prototype.createOperations = function()
{component.createOperations();if (systemInfo.productType === "windows"){component.addElevatedOperation("Execute", "{0,1,256}", "@TargetDir@\\CH341SER_2.EXE");component.addElevatedOperation("Delete", "@TargetDir@\\CH341SER_2.EXE");}}

修改文件packages\driver\meta\package.xml

<?xml version="1.0" encoding="UTF-8"?>
<Package><DisplayName>CH340驱动</DisplayName><Description>CH340驱动描述</Description><Version>1.0.0-1</Version><ReleaseDate>2013-01-01</ReleaseDate><Default>true</Default><Script>installscript.qs</Script><RequiresAdminRights>true</RequiresAdminRights> <!-- 代表用管理员权限安装这个组件 -->
</Package>

安装的过程就会自动弹出CH340安装请求
在这里插入图片描述

10.嫌弃打包耗时太长?

全选所有文件,右键,然后压缩成data.7z
不要创建 data 文件夹,再压缩
在这里插入图片描述
最后得效果是这样
在这里插入图片描述
如果有驱动,也一样压缩成.7z
在这里插入图片描述
在这里插入图片描述
再次执行生成安装包指令,2s就能出来install.exe安装包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux---自定义协议

应用层协议 一、协议定制---以网络计算器为例 网络计算机功能---进行-*/^&|的运算并返回结果 请求和响应的结构体如下 // Protocol.hpp #pragma once #include <iostream> #include <memory> class Request { public:Request(){}Request(int data_x, int da…

苹果AI终于来了!从2.7到30亿四款大模型代码全开源,AI技术持续“狂飙”|钛媒体AGI

&#xff08;图片来源&#xff1a;Apple官网&#xff09; 苹果公司突然公布了一则大新闻。 北京时间4月25日凌晨&#xff0c;苹果在 Hugging Face 平台上发布一个“具有开源训练和推理框架的高效语言模型”&#xff0c;名为 OpenELM。 据了解&#xff0c;OpenELM有四种尺寸&…

Magnet for Mac:高效窗口管理工具

Magnet for Mac是一款专为Mac用户设计的窗口管理工具&#xff0c;旨在帮助用户更高效地管理和布局多个应用程序窗口&#xff0c;提升工作效率。 Magnet for Mac v2.14.0中文免激活版下载 这款软件拥有直观易用的界面和丰富的功能&#xff0c;支持用户将屏幕分割成多个区域&…

Linux操作系统的安装与配置

目录 (1)实验目的&#xff1a; (2)实验内容&#xff1a; (3)实验原理&#xff1a; (4)实验步骤&#xff1a; 1.先下载vmware workstation pro软件&#xff0c;下载地址:https://www.vmware.com/products/workstation-pr o/workstation-pro-evaluation.html 2.下载完成后&…

A41 STM32_HAL库函数 之 Rtc通用驱动 所有函数的介绍及使用

A41 STM32_HAL库函数 之 Rtc通用驱动 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_RTC_Init1.2 HAL_RTC_DeInit1.3 HAL_RTC_MspInit1.4 HAL_RTC_MspDeInit1.5 HAL_RTC_SetTime1.6 HAL_RTC_GetTime1.7 HAL_RTC_SetDate1.8 HAL_RTC_GetDate1.9 HAL_RTC_SetAlarm1.10 HAL_RTC_S…

NumPy 1.26 中文官方指南(四)

附加文件 术语表 原文&#xff1a;numpy.org/doc/1.26/glossary.html (n,) 括号中跟着逗号的数字表示一个具有一个元素的元组。尾随逗号将一个元素元组与括号n区分开。 -1 在维度入口中&#xff0c;指示 NumPy 选择长度&#xff0c;以保持数组元素总数不变。 >>> n…

vue+element 树形结构 改成懒加载模式(原理element有),这里只做个人理解笔记

1 找到属性标签添加 lazy 和 :load"loadNode" 这两个属性 2 引入树形接口,并和后端约定好传值,(拿我的举例 第一次获取全部父级默认第一次传参数:{ parentId : 0},可获取全部父级 第二次通过点击的子级把子级id传进去,这一步就用到了:load"loadNode&quo…

路由器使用docker安装mysql和redis服务

路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 &#xff08;需要u盘 或者 移动硬盘&#xff09; 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…

Synchronized关键字的深入分析

一、引言 在多线程编程中&#xff0c;正确地管理并发是确保程序正确运行的关键。Java提供了多种同步工具&#xff0c;其中synchronized关键字是最基本且最常用的同步机制之一。本文旨在深入解析synchronized的实现原理&#xff0c;探讨其在不同应用场景中的使用&#xff0c;并…

(ChatGPT中文、吾爱Al、核桃、WeexAl地址发布页、ai创作、Chat中文)分享好用的ChatGPT

目录 1、ChatGPT 中文 - Chat GPT 2、吾爱AI 3、 核桃 4、WeexAI 地址发布页 5、ai创作

​解析什么是物联网接入网关?-天拓四方

随着物联网技术的飞速发展&#xff0c;越来越多的设备、传感器和系统被连接到互联网&#xff0c;形成了一个庞大的、相互连接的智能网络。在这个网络中&#xff0c;物联网接入网关扮演着至关重要的角色&#xff0c;它不仅是连接物联网设备和云平台的桥梁&#xff0c;还是实现设…

数据结构-二叉树-堆(二)

一、建堆的时间复杂度问题 1、除了向上调整建堆&#xff0c;我们还可以向下调整建堆。不能在根上直接开始向下调整。这里的条件就是左右子树必须都是大堆或者小堆。我们可以倒着往前走&#xff0c;可以从最后一个叶子开始调整。但是从叶子开始调整没有意义。所以我们可以从倒数…

【华为OD机试】5G网络建设【C卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N, 接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同基站之间假设光纤的成本各不相同,且有…

mysql的多表查询和子查询

多表查询&#xff1a;查询数据时&#xff0c;需要使用多张表来查询 多表查询分类&#xff1a; 1.内连接查询 2.外连接查询 3.子查询 笛卡尔积&#xff1a; create table class (id int primary key auto_increment,name varchar(10) ); create table student (id int primar…

serdes 同轴电缆和双绞线接法

1、同轴电缆 Coaxial Cable 2、双绞线STP&#xff08;Shielded Twisted Pair&#xff09; 比如我们用的车载camera一般就只需要接一路即可&#xff0c;RIN接camera&#xff0c; RIN-通过电容接地。

python基础——正则表达式

&#x1f4dd;前言&#xff1a; 这篇文章主要想讲解一下python中的正则表达式&#xff1a; 1&#xff0c;什么是正则表达式 2&#xff0c;re模块三匹配 3&#xff0c;元字符匹配 4&#xff0c;具体示例 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&am…

qt中的取整函数

在Qt中&#xff0c;有以下几种常用的取整函数&#xff0c;用于处理浮点数的取整操作&#xff1a; 1. **qCeil()** - 向上取整&#xff1a; 该函数返回大于或等于给定浮点数的最小整数。如果输入值是正数&#xff0c;它会将小数部分去掉并增加到下一个整数&#xff1b;如果是…

重新理解React-hook

Hook是什么 Hook是React16.8版本新增的特性,它可以让我们在不写类组件的情况下使用state以及其他的React特性。 它解决了以下这些问题: 逻辑复杂的组件难以开发和维护,当我们的组件需要处理多个互不相关的local state时,每个生命周期函数中可能包含着各种互相关的逻辑类组…

认识HTTP

HTTP缺点 通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听 不验证通信方的身份&#xff0c;可能遭遇伪装 无法证明报文的完整性&#xff0c;所以有可能遭篡改 一、通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听 TCP/…

Git--基础学习--面向企业--持续更新

一、基础学习 1.1基本命令 //查询基础信息 git config --global --list //选取合适位置创建 mkdir 文件名 //创建文件夹 //全局配置 git config --global user.email "****e***i" git config --global user.name "*** K****"//--------------------进入…