wpf创建xml随程序一起打包_一次使用Qt Installer Framework在centos7中打包经历

本人之前一直是在Windows平台上面开发软件,打包软件,这段时间公司要搞国产化,首先第一步就是要用国产操作系统,选中了UOS,一款Deepin基于Linux开发的操作系统。

公司有一套我用Qt5.10.1写的浏览器外壳,用msvc140编译的,Windows上面的打包工具非常多,这里就不说了,下面来看看我用Qt Installer Framework在centos7上面来打包一个qt编译好的程序并在UOS上面安装。

步骤1:下载安装Qt Installer Framework

http://download.qt-project.org/official_releases/qt-installer-framework/3.1.1/

12654dd6b4cd908246c376704cc7f4d3.png

ef8dea1d6ca3be2ab3fa05a71e8ab659.png

上面地址链接进去在上图上选一个用得着的版本下载安装,安装过程按照向导一步步来就是。

以下是我安装完成后本地目录内容:

[root@localhost ~]# cd /root/Qt/QtIFW-3.0.6
[root@localhost QtIFW-3.0.6]# cd bin
[root@localhost bin]# ls
archivegen  binarycreator  devtool  installerbase  repogen

我们要用的就是binarycreator 这个工具。

步骤2:构建安装包目录

Tutorial: Creating an Installer​doc.qt.io
1427d0df4a2311ef5e36f8e3c56979b8.png

上面这个链接是Qt doc上面的教程,按照教程基本也可以打好包了。

8a249bb9da66c12f5d31e0983496eb85.png

上面是目录结构,tutorial是新建的目录,名字随便取,最好跟你产品的名字一致,本次示例我用的名字叫gdwebframe,此目录下必须有两个目录config,packages。

其中config目录下必须有一个config.xml文件,下图是示例内容

[root@localhost config]# cat config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>快速开发客户端</Name>
    <Version>1.0.0</Version>
    <Title>快速开发客户端安装向导</Title>
    <Publisher>yajunsun</Publisher>
    <!-- Directory name is used in component.xml -->
    <StartMenuDir>chongqingguangda</StartMenuDir>
    <TargetDir>@HomeDir@/chongqingguangda/kskf</TargetDir>
    <Logo>camera42.png</Logo>
</Installer>

b620b80bf1b7f6b1c0c283c3eb4bff63.png
config.xml配置效果

config.xml配置内容反应在上图中。更多config.xml内容参考https://doc.qt.io/qtinstallerframework/ifw-globalconfig.html

注意:如果需要Logo,将你的logo文件(png格式)放在config目录中。

接下来packages目录,你可以将你的软件分成几部分以组件的形式放到这个目录下,用户可以选择他需要安装的组件。

比如我本次示例中packages目录下有如下两个目录,代表两个组件

e8fdf2c761febd571b23c7ad71563dea.png

组件反应在安装向导上的效果如下

94fa00c3e6c95b82936dde159ffedcd2.png
组件选择

每个组件目录下面又有两个目录data,meta。

data目录存放将要安装的组件内容(执行程序,配置文件,依赖文件,logo文件等),你希望你安装完成后软件包含哪些文件就在这里把这些文件放到data目录中。

7e52b1df01f211f1c1b1915dcbf33cdf.png
data目录存放本次示例的主角-&amp;amp;amp;gt;发布内容

meta目录存放的还是配置文件,这里的配置文件针对的是当前组件。

0663f67627e5f09582f1b18be2fda986.png
meta目录

上图是我本次示例中meta中的内容,其中必须包含package.xml文件,内容示例如下:

[root@localhost meta]# cat package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>客户端</DisplayName>
    <Description>快速开发客户端</Description>
    <Version>1.0</Version>
    <ReleaseDate>2020-06-04</ReleaseDate>
    <Licenses>
	<License name="the component license display" file="license.txt"/>
    </Licenses>
    <Default>true</Default>
    <Script>installscript.qs</Script>
</Package>
[root@localhost meta]# 

fbe205004fceec4a39d0bbc2dbab2432.png
DisplayName,Description上图效果

dd7a41b7b8745c4f1afa6fe0b9968d7b.png
展示License

如果你要展示你的License内容让用户接受,你需要在meta目录中建一个txt文件,然后再package.xml中配置<Licenses><License name="the component license display" file="license.txt"/></Licenses>。

更多package.xml内容请参考https://doc.qt.io/qtinstallerframework/ifw-component-description.html#package-information-file-syntax

以上内容搞完应该就能用binarycreator生成安装包了,但是程序是安装在config.xml定义的<TargetDir>目录中的,用户想要打开软件还得到这个目录中去打开,肯定是很不方便的,下面我在进一步使用脚本来使安装过程生成桌面快捷方式。

看到上面packag.xml中有一项<Script>installscript.qs</Script>了吗,而且我的meta目录中也有一个叫installscript.qs的文件,此文件就是一个脚本文件,这个文件的内容将在安装完成之后执行,生成软件的桌面文件,并将桌面文件复制到桌面,让用户可以在桌面上找到软件的打开入口。

步骤3:创建安装脚本

installscript.qs内容如下:

function Component() {}
Component.prototype.isDefault = function () {
    return true;
}
Component.prototype.createOperations = function () {
    try {
        component.createOperations();
	//windows平台的操作
        if (installer.value("os") === "win") {
            component.addOperation("CreateShortcut", "@TargetDir@/GDWebFrame.exe", "@DesktopDir@/GDWebFrame.lnk");
        }
	//Linux平台下的操作
        if (installer.value("os") === "x11") {
	//创建桌面文件@TargetDir是安装目录的变量,GDWebFrame.desktop是桌面文件的文件名
            component.addOperation("CreateDesktopEntry", "@TargetDir@/GDWebFrame.desktop", "[Desktop Entry]nEncoding=UTF-8nVersion=1.0nType=ApplicationnTerminal=falsenExec=@TargetDir@/GDWebFramenName=快速开发nIcon=@TargetDir@/camera42.png");
	//获取当前桌面路径    
	var desktoppath = QDesktopServices.storageLocation(0);
	//将桌面文件复制到/usr/share/applications/	目录下
            component.addElevatedOperation("Copy", "@TargetDir@/GDWebFrame.desktop", "/usr/share/applications/GDWebFrame.desktop");
	//将桌面文件复制到桌面目录下
            component.addElevatedOperation("Copy", "@TargetDir@/GDWebFrame.desktop", desktoppath + "/GDWebFrame.desktop");
        }
    } catch (e) {
        print(e);
    }
}

示例中的GDWebFrame.desktop文件内容比较简单,按照key=value对应很容易知道含义

[Desktop Entry]n
Encoding=UTF-8n
Version=1.0n
Type=Applicationn
Terminal=falsen
Exec=@TargetDir@/GDWebFramen
Name=快速开发n
Icon=@TargetDir@/camera42.png

更多脚本只是请参考https://doc.qt.io/qtinstallerframework/scripting-qmlmodule.html

以上操作就完成了本次示例中组件”客户端“的配置,多个组件的操作是一样的。

步骤4:生成安装包

上面都就绪后就可以开始执行以下命令生成安装包了

[root@localhost ~]# cd /root/Qt/QtIFW-3.0.6/bin
[root@localhost bin]# ls
archivegen  binarycreator  devtool  installerbase  repogen
[root@localhost bin]# binarycreator -c /workspace/createinstaller/gdwebframe/config/config.xml -p /workspace/createinstaller/gdwebframe/packages gdwebframe_kskf
[root@localhost bin]# ls
archivegen  binarycreator  devtool  gdwebframe_kskf  installerbase  repogen
[root@localhost bin]# mv gdwebframe_kskf /workspace/createinstaller/gdwebframe/gdwebframe_kskf
[root@localhost bin]# 

binarycreator -c /workspace/createinstaller/gdwebframe/config/config.xml -p /workspace/createinstaller/gdwebframe/packages gdwebframe_kskf

-c 指出config.xml的路径。-p 指出packages目录的路径。 最后的gdwebframe_kskf是生成的安装包程序名字

gdwebframe_kskf直接生成后是在和binarycreator一起的目录中,我将它移到本次示例根目录下。

06de5357953f7a37a6d2ff080723014f.png

步骤5:分发安装

直接在centos7中安装gdwebframe_kskf,程序图标出现在桌面上

3a756193e32ca6ccee95f016f5287abf.png
centos7上效果

我将复制到UOS操作系统上安装后效果如下图所示

8fb68b6314e4d3853684e07497d68e05.png
UOS上安装的效果

以上就是本次示例的全部内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将SQL Server数据库安装包和WPF程序安装包一起打包成一个安装程序,并实现自动安装数据库和WPF程序,可以按照以下步骤操作: 1. 将SQL Server数据库安装包和WPF程序安装包放置在同一文件。 2. 使用Visual Studio创建一个新的安装程序项目。对于Visual Studio 2019及更高版本,可以选择Visual Studio Installer项目模板。 3. 在安装程序项目添加需要安装的文件,包括SQL Server数据库安装包、WPF程序安装包和其他必需的文件。 4. 在安装程序项目添加自定义操作。对于Visual Studio Installer项目,可以使用Custom Actions功能来实现自定义操作。 5. 在自定义操作添加以下代码来安装SQL Server: ``` string arguments = "/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=\"NT AUTHORITY\\Network Service\" /SQLSYSADMINACCOUNTS=\"BUILTIN\\Administrators\" /TCPENABLED=1 /NPENABLED=1 /SECURITYMODE=SQL /SAPWD=\"myPassword123\""; ProcessStartInfo startInfo = new ProcessStartInfo("SQLEXPR_x64_ENU.exe", arguments); startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(startInfo).WaitForExit(); ``` 该代码将执行SQL Server的安装程序,并使用指定的参数进行安装。您可以根据自己的需求修改参数。请注意,此代码仅适用于64位版本的SQL Server。 6. 在自定义操作添加以下代码来安装WPF程序: ``` string arguments = "/SILENT /NORESTART /DIR=\"[TARGETDIR]\""; ProcessStartInfo startInfo = new ProcessStartInfo("MyWPFAppInstaller.msi", arguments); startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(startInfo).WaitForExit(); ``` 该代码将执行WPF程序的安装程序,并使用指定的参数进行安装。您需要将"MyWPFAppInstaller.msi"替换为实际的WPF程序安装包名称。请注意,此代码仅适用于MSI安装程序。 7. 编译并测试您的安装程序。 以上步骤将帮助您将SQL Server数据库安装包和WPF程序安装包一起打包成一个安装程序,并实现自动安装数据库和WPF程序的功能。请注意,在安装过程,SQL Server的安装程序可能需要管理员权限才能运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值