Qt 安装程序框架:自动更新
Qt Installer Framework: Auto Update
我目前正在使用 Qt Installer Framework 并设法建立了一个在线存储库。我想知道的是:
框架是否提供某种 "auto-update" 机制,例如每次 program/system 启动时检查更新的 plugin/service?
检查更新就足够了,因为安装本身可以使用维护工具完成。
关于这个话题,我能找到的只有这句话:
End users can use the maintenance tool to install additional components from the server after the initial installation, as well as to receive automatic updates to content as soon as the updates are published on the server.
从这里开始:http://doc.qt.io/qtinstallerframework/ifw-overview.html#choosing-installer-type
感谢您的帮助!
编辑:建议
基于这个问题的公认答案,我创建了一个小型库来使用安装程序框架自动检查更新 - https://github.com/Skycoder42/QtAutoUpdater
指南中有一节是关于如何操作的,但他们称之为促进更新而不是自动更新,IFW Updates on doc.qt.io。
我做的,是运行使用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();
我刚刚在 GitHub 上找到了一个非常好的实现:
https://github.com/ioriayane/TheArtOfQt2/blob/master/src/HelloWorld/maintenancetool.cpp
它负责处理 Windows、MacOS 和 Linux。 + 它是为在 QML / Qt Quick 绑定中使用而编写的(+ 示例)。
它有一些日语评论,但它是 Apache 2.0 许可的,因此可以自由使用(遵循 Apache 2.0 要求)。
在最新的 Qt Installer Framework 4.1 中 --checkupdates
returns 没有,请改用 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
我目前正在使用 Qt Installer Framework 并设法建立了一个在线存储库。我想知道的是:
框架是否提供某种 "auto-update" 机制,例如每次 program/system 启动时检查更新的 plugin/service?
检查更新就足够了,因为安装本身可以使用维护工具完成。
关于这个话题,我能找到的只有这句话:
End users can use the maintenance tool to install additional components from the server after the initial installation, as well as to receive automatic updates to content as soon as the updates are published on the server.
从这里开始:http://doc.qt.io/qtinstallerframework/ifw-overview.html#choosing-installer-type
感谢您的帮助!
编辑:建议
基于这个问题的公认答案,我创建了一个小型库来使用安装程序框架自动检查更新 - https://github.com/Skycoder42/QtAutoUpdater
指南中有一节是关于如何操作的,但他们称之为促进更新而不是自动更新,IFW Updates on doc.qt.io。
我做的,是运行使用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();
我刚刚在 GitHub 上找到了一个非常好的实现:
https://github.com/ioriayane/TheArtOfQt2/blob/master/src/HelloWorld/maintenancetool.cpp
它负责处理 Windows、MacOS 和 Linux。 + 它是为在 QML / Qt Quick 绑定中使用而编写的(+ 示例)。
它有一些日语评论,但它是 Apache 2.0 许可的,因此可以自由使用(遵循 Apache 2.0 要求)。
在最新的 Qt Installer Framework 4.1 中 --checkupdates
returns 没有,请改用 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