当前位置:  开发笔记 > 编程语言 > 正文

如何在Qt跨平台应用程序中启用自动更新?

如何解决《如何在Qt跨平台应用程序中启用自动更新?》经验,为你挑选了3个好方法。

我喜欢能够在没有用户任何努力的情况下更新自己的应用程序(想想:适用于Mac的Sparkle框架).在Qt应用程序中是否可以使用任何代码/库来执行此操作,而不必担心操作系统的详细信息?

至少对于Windows,Mac和用户拥有的Linux二进制文件.

我可以在Mac版本上集成Sparkle,为Linux案例编写代码(仅用于独立的,用户拥有的二进制文件; 如果我的程序打包,我不会搞乱分发包装),并找人帮助我Windows方面,但这非常痛苦.



1> Robert Knigh..:

它不是一个完整的解决方案,但可以通过https://github.com/mendeley/Update-Installer获得用于创建自动更新和安装包的跨平台(Windows,Mac,Linux)工具.此工具不处理发布更新或下载它们.

这是为了与基于Qt的应用程序一起使用,但为了使更新安装程序小巧,独立且易于构建,安装程序仅使用标准系统库(Linux/Mac上的C++运行时,pthreads/libz/libbz2,Windows上的Win32 API) ,Mac上的Cocoa,Linux上的后备版GTK.这简化了交付更新,包括新版本的Qt和您的应用程序可能依赖的其他非系统库.

在考虑这个之前,我会建议:

如果您只为两个平台构建,请考虑为这些平台使用标准且经过良好测试的自动更新框架 - 例如.Sparkle在Mac上,Google's Omaha在Windows上或内置于流行安装框架中的自动更新系统(例如InstallShield).我没有尝试过BitRock.

在Mac上,Mac App Store可能是个不错的选择.请参阅https://bugreports.qt.io/browse/QTBUG-16549.

在Linux上,考虑创建一个.deb包和一个简单的存储库来托管它.一旦用户设置了存储库,系统范围的软件更新工具将负责检查和安装新版本.但是,对于许多新的Ubuntu/Debian用户来说,设置新存储库的步骤过于复杂.我们所做的以及Dropbox和Google所做的是创建一个.deb包,它将存储库设置为包安装的一部分.

关于创建更新程序的一些其他说明:

在Windows Vista/7上,如果应用程序是在系统范围内安装的(例如,在C:\ Program Files\$ APPNAME中),则当updater尝试获取写入安装目录的权限时,用户将看到可怕的UAC提示.这可以通过安装到用户可写目录(我认为这是谷歌Chrome的功能)或获取Authenticode证书并使用它来签署更新程序二进制文件来避免.

在Windows Vista/7上,如果正在使用,则无法删除应用程序.exe或DLL,但更新程序可以将现有的.exe/DLL移到临时目录中,并在下次重新启动时将其安排删除.

在Ubuntu上,第三方存储库在分发更新后被禁用.Google通过创建一个cron-job来解决这个问题,以便在必要时重新添加存储库.



2> Linas..:

无耻的插件:Fervor,一个简单的多平台(基于Qt)应用程序autoupdater灵感来自Sparkle.


来自Ferver自述文件:"Ferver无法自动安装实际更新.用户可以选择手动下载和安装更新." 换句话说:它只不过是一个说"新版本可用"的弹出窗口?

3> Alex Spataru..:

无耻的插件:这是一个相对古老的问题,但我认为提到我最近创建的一个库可能是有用的,我将其命名为"QSimpleUpdater".除了通知您是否有更新版本之外,它还允许您以任何格式(例如HTML或RTF)下载更改日志,并使用对话框直接从您的应用程序下载更新.

正如您对Qt项目所期望的那样,它适用于Qt支持的任何平台(在Windows,Mac和Linux上测试).

链接:

网站

GitHub存储库

截图:

在此输入图像描述

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有