QtIFW:制作程序安装包

        程序发布方式一般有两种:(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工程的目录结构如下图所示:

QtIFW:制作程序安装包_第1张图片

   首先是config目录下的config.xml文件,该文件设定了安装程序界面的一些文字和图片信息。一个简单的config文件如下:



    Change Installer UI Example    //程序名字
    Installation Guide           //安装界面标题
    1.0.0                    //版本
    Qt-Project           //出版
    Qt IFW Examples //开始菜单位置
    @HomeDir@/IfwExamples/changeuserinterface //程序安装的目标路径
       在packages文件夹下有两个子文件夹meta和data。meta目录下用于存放一些安装过程的配置文件,用于指定安装和部署过程。在meta文件夹中至少需要一个package.xml及所有在该文件中引用到的资源文件,如脚本文件、界面资源、翻译文件等。在package.xml中引用所有这些资源。package.xml文件描述了一个安装过程的基本信息,其格式如下:



    Dummy Component                 //安装组件的名称
    This example does not install any components. It demonstrates //组件描述信息
    modifying the text on the next page.
    1.0.0-1               //程序版本
    2013-01-01    //发布日期 
    true
           //JS文件用来加载一些安装过程
    
          //许可文件
    
    

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");
    }
}


效果如下:

           QtIFW:制作程序安装包_第2张图片

     

参考文献:

windeployqt.exe

dumpbin查看依赖库

Qt installer framework



你可能感兴趣的:(Qt)