2015-12-16 11 views
7

В настоящее время я использую Qt Installer Framework и сумел настроить онлайн-репозиторий. Я хочу знать следующее:Qt Installer Framework: Auto Update

Предоставляет ли Framework какое-то «автоматическое обновление» механизма, например. плагин/служба, которая проверяет наличие обновлений при каждом запуске программы/системы?
Проверить наличие обновлений было бы достаточно, так как сама установка может быть выполнена с помощью инструмента maintanance.

Все, что я мог найти на эту тему было это маленькое предложение:

Конечные пользователи могут использовать средства обслуживания для установки дополнительных компонентов с сервера после начальной установки, а также получать автоматические обновления на контент, как только обновления будут опубликованы на сервере.

здесь: http://doc.qt.io/qtinstallerframework/ifw-overview.html#choosing-installer-type

Спасибо за вашу помощь!

Edit: Предложение
На основании принятого answere на этот вопрос, я создал небольшую библиотеку для автоматической проверки наличия обновлений с помощью платформы установки - https://github.com/Skycoder42/QtAutoUpdater

+0

Вы можете найти [Mendeley/Update-Installer] (https://github.com/Mendeley/Update-Installer) интересно. –

ответ

13

Что я делаю, запускаем инструмент обслуживания с помощью QProcess, а затем проверяем вывод. Он имеет режим, в котором он не запускает графический интерфейс пользователя, но только выводит информацию об обновлении, если она доступна.

Обратите внимание, что я устанавливаю рабочий каталог на путь приложения при запуске приложений, поэтому я могу просто запустить 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(); 
0

Там в разделе в руководстве о том, как это сделать, но они называют это продвижением обновлений, а не автоматических обновлений, IFW Updates on doc.qt.io.

+0

Я видел это, но если я правильно понимаю, пользователь должен будет запустить MaintananceTool, чтобы получить эти обновления? – Felix