我目前正在使用Qt安装程序框架并设法建立在线存储库。我想知道的是:
框架是否提供某种"自动更新"机制,例如每次程序/系统启动时检查更新的插件/服务? 检查更新就足够了,因为安装本身可以使用维护工具完成。
我能找到关于这个主题的所有内容都是这个小句子:
最终用户可以使用维护工具在初始安装后从服务器安装其他组件,并在服务器上发布更新后立即接收自动更新内容。
从这里开始:http://doc.qt.io/qtinstallerframework/ifw-overview.html#choosing-installer-type
感谢您的帮助!
编辑:建议
根据这个被接受的问题,我创建了一个小型库,使用安装程序框架自动检查更新 - https://github.com/Skycoder42/QtAutoUpdater
答案 0 :(得分:17)
我的工作是使用QProcess运行维护工具,然后检查输出。它有一种模式,它不运行GUI,但只输出更新信息(如果可用)。
请注意,我在应用程序启动时将工作目录设置为应用程序的路径,因此我可以运行maintenancetool。
QProcess process;
process.start("maintenancetool --checkupdates");
// Wait until the update tool is finished
process.waitForFinished();
if(process.error() != QProcess::UnknownError)
{
qDebug() << "Error checking for updates";
return false;
}
// Read the output
QByteArray data = process.readAllStandardOutput();
// No output means no updates available
// Note that the exit code will also be 1, but we don't use that
// Also note that we should parse the output instead of just checking if it is empty if we want specific update info
if(data.isEmpty())
{
qDebug() << "No updates available";
return false;
}
// Call the maintenance tool binary
// Note: we start it detached because this application need to close for the update
QStringList args("--updater");
bool success = QProcess::startDetached("maintenancetool", args);
// Close the application
qApp->closeAllWindows();
答案 1 :(得分:1)
在最新的 Qt Installer Framework 4.1 中,--checkupdates
不返回任何内容,请改用 ch
或 check-updates
。
Commands:
in, install - install default or selected packages - <pkg ...>
ch, check-updates - show available updates information on maintenance tool
up, update - update all or selected packages - <pkg ...>
rm, remove - uninstall packages and their child components - <pkg ...>
li, list - list currently installed packages - <regexp>
se, search - search available packages - <regexp>
co, create-offline - create offline installer from selected packages - <pkg ...>
pr, purge - uninstall all packages and remove entire program directory
答案 2 :(得分:0)
指南中有关于如何操作的部分,但他们称之为推广更新而不是自动更新,IFW Updates on doc.qt.io。
答案 3 :(得分:0)
我刚刚在GitHub上找到了一个很好的实现:
https://github.com/ioriayane/TheArtOfQt2/blob/master/src/HelloWorld/maintenancetool.cpp
它负责处理Windows,MacOS和Linux。 +编写用于QML / Qt Quick绑定(+示例)。
它有一些日语注释,但已获得Apache 2.0许可,因此可以自由使用(遵循Apache 2.0要求)。