概述
程序发布方式一般有两种:(1)静态编译发布。这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中。其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大。(2)制作安装包发布。这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布。用来制作安装包的工具有很多,本文讲解有Qt官方提供的一个程序安装框架:Qt installer framework。
1、程序依赖库查找
不管是哪一种方式都需要程序先把程序所依赖的库找齐,查找依赖库方式有很多,这里介绍两种查找方式:
1)使用qt工具windeployqt.exe查找Qt依赖库,该工具可以将查找到的插件文件夹和dll文件、qm文件自动复制到可执行文件(exe)所在文件夹下。但该工具只能查找qt的依赖库,对于用了多个库包的程序并不适用。
操作:打开Qt for Desktop命令窗口,在其中输入如下命令:
windeployqt 路径名/xxx.exe
2)使用vs工具dumpbin.exe查找依赖库,该工具使用与前面类似,其可以查找到程序所有的依赖项(实际操作中 仍然会出现缺失DLL文件现象)。
操作:VS工具命令窗口,在其中输入如下命令
dumpbin /dependents 文件路径名xxx.exe
2、QtIFW使用
下载地址:http://download.qt.io/official_releases/qt-installer-framework/
提供了多个版本的QtIFW。
安装好后,在example下面找一个工程模板(一般选取startMenu,这个例子比较简单)。一个典型的QtIFW工程的目录结构如下图所示:
首先是config目录下的config.xml文件,该文件设定了安装程序界面的一些文字和图片信息。一个简单的config文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Change Installer UI Example</Name> //程序名字
<Title>Installation Guide</Title> //安装界面标题
<Version>1.0.0</Version> //版本
<Publisher>Qt-Project</Publisher> //出版
<StartMenuDir>Qt IFW Examples</StartMenuDir> //开始菜单位置
<TargetDir>@HomeDir@/IfwExamples/changeuserinterface</TargetDir> //程序安装的目标路径
</Installer>
在packages文件夹下有两个子文件夹meta和data。meta目录下用于存放一些安装过程的配置文件,用于指定安装和部署过程。在meta文件夹中至少需要一个package.xml及所有在该文件中引用到的资源文件,如脚本文件、界面资源、翻译文件等。在package.xml中引用所有这些资源。package.xml文件描述了一个安装过程的基本信息,其格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>Dummy Component</DisplayName> //安装组件的名称
<Description>This example does not install any components. It demonstrates //组件描述信息
modifying the text on the next page.</Description>
<Version>1.0.0-1</Version> //程序版本
<ReleaseDate>2013-01-01</ReleaseDate> //发布日期
<Default>true</Default>
<Script>installscript.qs</Script> //JS文件用来加载一些安装过程
<Licenses>
<License name="Beer Public License Agreement" file="license.txt" /> //许可文件
</Licenses>
</Package>
data文件夹中则用于存放我们实际需要打包的程序文件(*.dll, *.exe等),Qt installer framework在制作过程中用 archivegen 会将这些文件压缩成7zip格式。安装过程中自动从压缩包中提取出数据文件。其中License节中指定了协议条款,file属性指定了协议条款所在的文件。UserInterfaces和Translations节分别指定了界面资源文件和翻译文件。
准备工作完成后,我们将这个目录移动到QtIFW目录下(方便在命令行中操作)。使用binaryCraetor工具来生成最后的安装包程序。命令如下:
binarycreator.exe -c Root_Setup/config/config.xml -p Root_Setup/packages my_install.exe -v
如果要增加开始菜单快捷方式,这需要 修改installscript.qs:
function Component()
{
// default constructor
gui.pageWidgetByObjectName("LicenseAgreementPage").entered.connect(changeLicenseLabels); //添加许可文件界面
}
changeLicenseLabels = function()
{
page = gui.pageWidgetByObjectName("LicenseAgreementPage");
page.AcceptLicenseLabel.setText("Yes I do!"); //设置按钮文本
page.RejectLicenseLabel.setText("No I don't!");
}
Component.prototype.createOperations = function()
{
// call default implementation to actually install README.txt!
component.createOperations();
if (systemInfo.productType === "windows") {
component.addOperation("CreateShortcut", "@TargetDir@/HSCDetection.exe", "@StartMenuDir@/RootMeasurer3D.lnk");
component.addOperation("CreateShortcut", "@TargetDir@/HSCDetection.exe", "@HomeDir@/Desktop/RootMeasurer3D.lnk");
}
}
效果如下:
参考文献:
windeployqt.exe
dumpbin查看依赖库
Qt installer framework
最后
以上就是危机宝马为你收集整理的QtIFW:制作程序安装包的全部内容,希望文章能够帮你解决QtIFW:制作程序安装包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复