qtauto-updateqt-installer

Qt Installer Framework: Auto Update


I'm currently using the Qt Installer Framework and managed to set up an online repository. What I want to know is:

Does the Framework provide some kind of "auto-update" mechanism, e.g. a plugin/service that checks for updates every time the program/system starts?
Check for updates would be enough, since the installation itself can be done using the maintanance tool.

All I could find about this topic was this small sentence:

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.

from here: http://doc.qt.io/qtinstallerframework/ifw-overview.html#choosing-installer-type

Thanks for your help!

Edit: Suggestion
Based on this question's accepted answere I created a small library to automatically check for updates using the installer framework - https://github.com/Skycoder42/QtAutoUpdater


Solution

  • What I do, is run the maintenance tool using QProcess, and then check the output. It has a mode where it doesn't run the GUI but only outputs update information if available.

    Note that I set the working directory to the application's path when the applications starts, so I can just run 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();