首页/新闻资讯/正文详情

Qt应用Inno Setup安装包制作与简介展示实战

发布时间:2026/11/3 11:32:12 来源:云帆数科 栏目:资讯中心
Qt应用Inno Setup安装包制作与简介展示实战
1. 项目背景与核心需求最近在帮一个Qt开发团队解决Windows平台下的安装包制作问题。他们用Qt编译生成的exe文件需要专业级的安装包但发现NSIS脚本编写门槛太高而Inno Setup刚好填补了这个空白。这个工具最大的优势在于能用类Pascal的脚本语言快速构建安装程序特别适合需要添加自定义信息的场景。最让我印象深刻的是团队要求在安装界面展示软件简介的功能。这个看似简单的需求实际上涉及到Inno Setup脚本编译、Qt资源文件整合、多语言支持等一整套技术栈。经过两周的实战调试我总结出一套稳定可靠的实现方案现在把关键步骤和避坑要点分享给大家。2. 环境准备与工具链配置2.1 基础软件安装首先需要准备以下工具注意版本兼容性Inno Setup 6.2.0必须用Unicode版本Qt 5.15.2 开发环境Windows SDK确保有signtool.exe用于代码签名重要提示不要使用Qt自带的windeployqt工具处理依赖它会把所有dll都打包进去。建议先用Dependency Walker分析真实依赖关系。2.2 项目目录结构规范推荐按以下方式组织项目/ProjectRoot /build /release # 存放编译后的exe /installer /images # 安装界面图片 /translations # 多语言文件 config.iss # 主脚本文件3. Inno Setup脚本深度解析3.1 基础脚本框架这是最简可用的脚本模板[Setup] AppNameMyQtApp AppVersion1.0 DefaultDirName{pf}\MyQtApp OutputDir.\Output OutputBaseFilenameSetup Compressionlzma2 SolidCompressionyes [Files] Source: ..\build\release\*.exe; DestDir: {app}; Flags: ignoreversion Source: ..\build\release\*.dll; DestDir: {app}; Flags: ignoreversion3.2 添加简介的核心方法实现安装界面显示简介有三种主流方案内联文本法适合简单介绍[Setup] AppPublisherMy Company AppPublisherURLhttps://example.com AppVersion1.0 VersionInfoDescriptionThis is my app description外部文件法推荐方案[Setup] LicenseFile..\installer\license.txt InfoBeforeFile..\installer\intro.txt # 这是关键参数自定义页面法最灵活 需要编写Pascal脚本[Code] procedure InitializeWizard(); var Page: TWizardPage; begin Page : CreateCustomPage(wpWelcome, Application Intro, Detailed description); // 添加RTF控件显示富文本 end;4. Qt项目集成实战4.1 编译时自动生成简介在Qt项目的.pro文件中添加# 生成版本信息文件 VERSION 1.0.0 win32 { RC_FILE version.rc QMAKE_POST_LINK $$PWD/generate_readme.bat }创建generate_readme.batecho off echo This software is developed using Qt %QT_VERSION% ..\installer\intro.txt echo Build date: %date% %time% ..\installer\intro.txt4.2 多语言支持方案对于国际化项目建议这样组织/installer /translations intro_zh.txt intro_en.txt修改脚本为[Setup] InfoBeforeFile{cm:IntroFile} [Languages] Name: en; MessagesFile: compiler:Default.isl; \ IntroFile: translations\intro_en.txt Name: zh; MessagesFile: compiler:Languages\ChineseSimplified.isl; \ IntroFile: translations\intro_zh.txt5. 高级技巧与避坑指南5.1 版本信息注入在version.rc文件中添加VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 { BLOCK StringFileInfo { BLOCK 040904b0 { VALUE FileDescription, My Qt Application VALUE FileVersion, 1.0.0.0 VALUE LegalCopyright, Copyright 2023 } } }5.2 常见问题排查乱码问题确保所有文本文件保存为UTF-8 with BOM格式在脚本开头添加#pragma codePage(65001)路径错误使用相对路径时建议用{src}\..\build格式调试时加上/LOGbuild.log参数查看详细过程签名失败[Setup] SignToolmysigntool SignedUninstalleryes [Code] procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep ssDone then Exec(signtool.exe, sign /a /t http://timestamp.digicert.com {app}\*.exe, , SW_HIDE, ewWaitUntilTerminated, ResultCode); end;6. 自动化构建方案6.1 集成CI/CD流程在GitLab CI中这样配置build_installer: stage: deploy script: - cd build - qmake ../ProjectRoot/MyApp.pro -spec win32-msvc - jom release - iscc ../installer/config.iss /DMyAppVersion%CI_COMMIT_TAG% artifacts: paths: - installer/Output/*.exe6.2 增量更新方案通过以下脚本实现增量打包[Setup] AppId{{3B9D29F0-5B9A-4B3D-B483-BC2D0170B2A1} AppMutexGlobal\MyQtAppMutex [Code] function GetPreviousVersion: String; var Version: String; begin if RegQueryStringValue(HKLM, Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting(AppId)}_is1, DisplayVersion, Version) then Result : Version; end;经过实际项目验证这套方案可以稳定支持多语言简介展示自动版本号注入数字签名集成静默安装支持/VERYSILENT参数卸载时保留用户数据最后分享一个实用技巧在调试安装脚本时可以用/DEBUGWND参数启动ISPP调试器可以实时查看变量值和执行流程比单纯看日志高效得多。

相关推荐

恶意广告攻击技术解析与防御实践
恶意广告攻击技术解析与防御实践

1. 恶意广告攻击的技术背景与现状 最近几年,网络安全领域出现了一种新型的高级威胁攻击手法——通过合法广告平台投放恶意链接。这种攻击方式之所以危险,在于它完美利用了人们对大型广告平台的信任。攻击者不再需要直接发送可疑链接,而是通过… · 2026/11/3 11:32:12

Keysight N6705C:电源行为可视化与μA级时序诊断平台
Keysight N6705C:电源行为可视化与μA级时序诊断平台

简介:本资源是Keysight N6705C直流电源分析仪的官方用户指南PDF文档,面向电子测试领域的研发工程师、产线测试人员及高校实验教师,解决高精度直流供电、动态负载模拟与多维电参数实时分析等复合型测试需求。文档全面覆盖仪器快速上手、安全安… · 2026/11/3 11:32:12

信息学奥赛单词游戏:欧拉回路与DFS应用
信息学奥赛单词游戏:欧拉回路与DFS应用

1. 项目概述 "信息学奥赛一本通 1528:【例 2】单词游戏"是一道典型的信息学奥林匹克竞赛训练题目,主要考察选手对字符串处理、图论算法和深度优先搜索(DFS)的综合运用能力。这道题目要求选手设计一个算法,判断给定的一组单词能否首… · 2026/11/3 11:32:12

集体好奇心驱动的AI研发:群体智能如何重塑技术探索
集体好奇心驱动的AI研发:群体智能如何重塑技术探索

1. 集体好奇心驱动的AI研发范式变革去年参与某开源大模型项目时,我亲眼见证了一个有趣现象:当社区开发者偶然发现模型在特定语境下会产生诗化输出后,短短两周内涌现出87种诗歌生成改进方案。这种自发的探索热情,正是集体好奇心&am… · 2026/11/3 23:21:49

时序数据库多级索引优化与标签检索实践
时序数据库多级索引优化与标签检索实践

1. 时序数据库中的标签检索挑战 时序数据库作为物联网、监控系统等场景的核心基础设施,每天需要处理数十亿甚至上万亿条带标签的时间序列数据。以TDengine为例,一个典型的工业物联网部署可能包含数百万台设备,每台设备有数十个监测指标&#… · 2026/11/3 23:21:49

电力电子技术第五版课后详解:晶闸管、PWM与驱动电路原理透析
电力电子技术第五版课后详解:晶闸管、PWM与驱动电路原理透析

简介:本资源是《电力电子技术》第五版(王兆安、刘进军主编,机械工业出版社)的课后习题详细答案,专为电气工程、自动化及相关专业本科生考研复习与期末备考设计。内容覆盖第二章电力电子器件(晶闸管导通/关断… · 2026/11/3 23:21:49

DSec:面向大规模智能体强化学习的确定性训练操作系统
DSec:面向大规模智能体强化学习的确定性训练操作系统

1. 项目概述:这不是又一个“沙箱”,而是智能体训练的工业化流水线最近看到 DeepSeek 发布的 DSec 弹性计算沙箱平台技术报告,我第一时间下载了 PDF,通读三遍,又翻出他们过去半年在 arXiv 和 GitHub 上公开的 RL 训练日… · 2026/11/3 23:21:49

Temu卖家必备:自动化利润计算工具开发实战
Temu卖家必备:自动化利润计算工具开发实战

1. 项目背景与核心价值做Temu平台的卖家都知道,利润计算是个让人头疼的活儿。我做了三年跨境电商,光是因为算错成本导致的亏损就不下五次。直到去年自己开发了这套凌风工具箱,才算真正解决了这个痛点。这个工具最核心的功能就是自动化利润计算… · 2026/11/3 23:21:49

Elasticsearch与Flink构建高效日志处理系统实战
Elasticsearch与Flink构建高效日志处理系统实战

1. 日志数据处理的行业背景与核心价值日志数据就像现代数字世界的"黑匣子",记录着系统运行的每一个关键瞬间。从服务器监控到用户行为分析,从安全审计到业务决策支持,日志数据已经成为企业数据资产中不可或缺的一部分。我在金融科技… · 2026/11/3 23:20:49

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码