当前位置: 首页 > news >正文

使用windeployqt和InstallShield打包发布Qt软件的流程

前言

    Qt编译之后需要打包发布,并且发布给用户后需要增加一个安装软件,通过安装软件可以实现Qt软件的安装;用于安装软件的软件有很多,这里主要介绍InstallShield使用的流程;

使用windeployqt打包Qt编译后的程序

Qt程序编译后是这样的文件,没有包括依赖的dll环境;此时发布给别人会报错缺少dll文件,因此需要将dll文件打包发布;
在这里插入图片描述

方法一:
如果是VS+Qt联合编译的,需要添加一个VS的环境变量。如果是Qt单独编译,则直接跳到3

  1. 找到VS的安装目录,比如我的是默认安装在C盘。复制路径
C:\Program Files\Microsoft Visual Studio\2022\Community\VC
  1. 打开环境变量,添加一个系统变量,变量名为VCINSTALLDIR,变量值为
C:\Program Files\Microsoft Visual Studio\2022\Community\VC
  1. win+R输入cmd打开命令窗口,通过cd /d命令进入到我们要操作的文件夹(.exe所在文件夹)
cd /d C:\Users\BaiYang\Desktop\asd

或者直接在文件窗口地址栏输入cmd回车。

  1. 执行 “windeployqt ExamSys.exe” 命令,换成自己的.exe名字

方法二:

  1. 先找到windeployqt.exe的位置
    比如说,我的qt安装位置是:
C:\Qt\Qt5.9.6\5.9.6\msvc2015_64\bin\windeployqt.exe

命令行切换到此位置

  1. 再找到自己生成的exe文件位置,比如说,我的是:
G:\bin\Test.exe
  1. cmd进入命令行,执行命令
C:\Qt\Qt5.9.6\5.9.6\msvc2015_64\bin\windeployqt.exe G:\bin\Test.exe

在这里插入图片描述
windeployqt执行后会将依赖的dll文件打包在一起;

使用InstallShield软件发布Qt打包后的文件,制作成程序压缩包

下载及安装InstallShield
InstallShield
百度网盘提取码:abcd
安装过后,把fix文件夹内的文件更新到安装后的system文件夹内;

安装后的InstallShield软件界面是:
在这里插入图片描述

第一步

点击Home->New,选择Basic MSI,这里是管理整个项目的意思,给项目起个名字。
名称为test,会在G盘建立一个test.ism的文件;
在这里插入图片描述

第二步

软件的Installation Designer。这里是整个项目各个参数的设置,可以对项目细节完善。可以先用快捷方式先确定好项目,再从Installation Designer这里完善。

第三步

先用快捷方式完成项目。点击view->ProgectAssistant。进入助手界面。
在这里插入图片描述

第四步

按照最下面一行的提示,逐步修改项目。

  1. 确定软件信息
    在这里插入图片描述
  2. 这里可以直接选默认选项

在这里插入图片描述

  1. 最重要的是这里,确定安装文件,将自己的exe文件和依赖的dll文件添加到文件内;文件夹选择Add Folders(注意软件很容易卡死,随时点击save项目,不然又要从头开始)
    在这里插入图片描述
    在ProgramFilesFolder上面就是CommonFileFolder,这里存放的是软件的一些配置文件等;也可以将这个路径设置成系统环境变量,将dll放在这里,这样你可以安装一个纯exe文件,程序会从系统路径内寻找dll文件;
    像我自己的电脑里便有Common Files里面有之前安装软件存放的配置文件;
    在这里插入图片描述

  2. 这两个可以跳过默认,也可以自己选择
    在这里插入图片描述

  3. 选择安装时的语言
    在这里插入图片描述

  4. 发布程序安装包
    在这里插入图片描述
    点击Build Installation便开始制作安装包,等待制作完成
    在这里插入图片描述

第六步

若是用户安装时需要设定用户的系统变量,比如说path,可以跳回到Installation Designer界面,选择Environment Variables;
在这里插入图片描述
增加系统环境变量
在这里插入图片描述
设置环境变量Path
在这里插入图片描述
对这里的参数说明:
On Install:
          Set:已经存在的环境变量
          Create:创建一个新的环境变量
Placement:
          Replace:替换以前的值
          Prefix:在前面追加值
          Append:在后面追加值
On Uninstall:
          Remove:在卸载的时候删除
          Leave:在卸载的时候保留
Type:
          User:用户变量
          System:系统变量

    以上流程走完就是一个简易的InstallShield发布过程,当然,比如说setup.exe的ICON设置等都可以在Installation Designer慢慢完成;

验证发布

上述流程走完之后,便可以在test.ism同级目录下,生成一个test文件夹;
在这里插入图片描述
在DISK1目录下会看到安装程序,点击会看到安装过程;

在这里插入图片描述
至此,Qt编译生成的exe发布完成;

相关文章:

使用windeployqt和InstallShield打包发布Qt软件的流程

前言 Qt编译之后需要打包发布,并且发布给用户后需要增加一个安装软件,通过安装软件可以实现Qt软件的安装;用于安装软件的软件有很多,这里主要介绍InstallShield使用的流程; 使用windeployqt打包Qt编译后的程序 Qt程序…...

解决selenium的getdrive()方法阻塞问题

selenium里面的Webdriver的get()方法默认是阻塞的,也就是说要等整个页面全都加载完它才会相应。但我们大部分时候不需要用到页面里的所有东西,也许只需要用到里面的一个元素就行了 所以下面是我的解决方法: 初始化代码: # 设置…...

js的闭包

闭包是有权限访问其他函数作用域的局部变量的一个函数 代码 function outer(){const a1;function f(){console.log(a)}f()}outer() 简单来说:闭包内层函数引用的外层函数变量 为什么要使用闭包? 用此方法可以来统计函数调用次数, 但是如…...

ubuntu20.04 直接安装vpp23.06 测试双 VPP Tunnel Ike2

环境信息:VMware Workstation 17 Pro ubuntu20.04 (清华源) ubuntu 源点进去选:ubuntu-22.04.3-desktop-amd64.iso 如果之前装过VPP,用以下命令确定是否卸载干净: dpkg -l | grep vpp dpkg -l | grep DPDK 卸载: …...

mysql sql 执行流程

监控查询缓存的命中率 show status like ‘%qcache%’; mysql 缓存机制,以及 8.0 为啥取消 select sql_NO_Cache * from 表 where xxx; # 不使用缓存...

go-kafka

go kafka包 本文使用的是kafka-go 6.5k 这个包 其他包参考: 我们在细分市场中非常依赖GO和Kafka。不幸的是,在撰写本文时,Kafka的GO客户库的状态并不理想。可用选项是: 萨拉玛(Sarama) 10k,这…...

如何在windows电脑上安装多个node,并可以进行随意切换

一、进入官网http://nvm.uihtm.com/ 下载 二、启动解压后的程序 1.开始安装nvm 选择要安装的目录 一直下一步–下一步–最后点击完成 3.最后点击完成即可 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3656568c7e9946e8a04219811fc4c4d3.png 三、在cmd控制台进行操作…...

《机器学习核心技术》分类算法 - 决策树

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 决策树 1、决策树API2、决策时实际应用2.1、获取数据集2.2、划分数据集2.3、决策…...

aws PinPoint发附件demo

php 版aws PinPoint发附件demo Laravel8框架,安装了"aws/aws-sdk-php": "^3.257" 主要代码: public function sendRawMail(Request $request) {$file $request->file(attachment);/*echo count($file);dd($file);*/$filenam…...

边写代码边学习之Bidirectional LSTM

1. 什么是Bidirectional LSTM 双向 LSTM (BiLSTM) 是一种主要用于自然语言处理的循环神经网络。 与标准 LSTM 不同,输入是双向流动的,并且它能够利用双方的信息。 它也是一个强大的工具,可以在序列的两个方向上对单词和短语之间的顺序依赖…...

Django学习笔记-实现联机对战

笔记内容转载自 AcWing 的 Django 框架课讲义,课程链接:AcWing Django 框架课。 CONTENTS 1. 统一长度单位2. 增加联机对战模式3. 配置Django Channels 1. 统一长度单位 多人模式中每个玩家所看到的地图相对来说应该是一样的,因此需要固定地…...

nacos总结1

5.Nacos注册中心 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 5.1.认识和安装Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c…...

Web安全测试(三):SQL注入漏洞

一、前言 结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬! 全部…...

Webstorm 入门级玩转uni-app 项目-微信小程序+移动端项目方案

1. Webstorm uni-app语法插件 : Uniapp Support Uniapp Support - IntelliJ IDEs Plugin | Marketplace 第一个是不收费,第二个收费 我选择了第二个Uniapp Support ,有试用30天,安装重启webstorm之后,可以提高生产率…...

从零开始的Hadoop学习(三)| 集群分发脚本xsync

1. Hadoop目录结构 bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件lib目录:存放Hadoop的本地库(对…...

golang http transport源码分析

golang http transport源码分析 前言 Golang http库在日常开发中使用会很多。这里通过一个demo例子出发,从源码角度梳理golang http库底层的数据结构以及大致的调用流程 例子 package mainimport ("fmt""net/http""net/url""…...

spring boot 项目整合 websocket

1.业务背景 负责的项目有一个搜索功能,搜索的范围几乎是全表扫,且数据源类型贼多。目前对搜索的数据量量级未知,但肯定不会太少,不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多,未了避免有个别极大数据源影响整…...

统计学补充概念-17-线性决策边界

概念 线性决策边界是一个用于分类问题的线性超平面,可以将不同类别的样本分开。在二维空间中,线性决策边界是一条直线,将两个不同类别的样本分隔开来。对于更高维的数据,决策边界可能是一个超平面。 线性决策边界的一般形式可以表…...

指针变量、指针常量与常量指针的区别

指针变量、指针常量与常量指针 一、指针变量 定义:指针变量是指存放地址的变量,其值是地址。 一般格式:基类型 指针变量名;(int p) 关键点: 1、int * 表示一种指针类型(此处指int 类型),p(变量…...

mq与mqtt的关系

文章目录 mqtt 与 mq的区别mqtt 与 mq的详细区别传统消息队列RocketMQ和微消息队列MQTT对比:MQ与RPC的区别 mqtt 与 mq的区别 mqtt:一种通信协议,规范 MQ:一种通信通道(方式),也叫消息队列 MQ…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...