Qt Installer Framework: флаг maintenancetool --checkupdates ничего не возвращает

Инструмент обслуживания, поставляемый в комплекте с онлайн-установщиками для приложений Qt, предположительно может быть запущен без управления с флагом «--checkupdates», который возвращает информацию об обновлении, если она доступна (см. Qt Installer Framework: автоматическое обновление). К сожалению, я не могу заставить эту команду что-либо вернуть, даже если доступно известное обновление. Я могу запустить средство обслуживания из командной строки, и обновление будет видно, но попытка использовать флаг --checkupdates ничего не дает.

QProcess update;
update.setWorkingDirectory(QDir::currentPath());
update.start("maintenancetool --checkupdates");

// Wait until the maintenancetool is finished
update.waitForFinished();

// Read the output
QByteArray data = update.readAllStandardOutput();

Я могу заставить этот код открыть инструмент обслуживания, если уберу флаг --checkupdates, но данные всегда пусты, даже если есть обновление. Если я попытаюсь запустить процесс в командной строке, он также ничего не даст, поэтому я не думаю, что это проблема с кодом. Любые идеи? Похоже, что информации об этом не так много.


person ce_nort    schedule 15.03.2016    source источник
comment
Вы пробовали делать это из командной строки? Потому что обычно ваш пример должен работать   -  person Felix    schedule 15.03.2016
comment
Да, извините, если мой язык был немного двусмысленным: вызов инструмента обслуживания из командной строки с флагом --checkupdates не приводит к выходу.   -  person ce_nort    schedule 15.03.2016
comment
Обычно это означает, что доступных обновлений нет - можете ли вы увидеть обновления, если используете пользовательский интерфейс? Если да, проверьте код выхода запуска --checkupdates, если он 0, это означает, что обновления были найдены, если 1, обновлений нет.   -  person Felix    schedule 15.03.2016
comment
Я действительно могу видеть обновления, если использую пользовательский интерфейс. Я только что проверил код выхода, и он равен 0, так что, очевидно, это означает, что он находит обновления? Но если это так, то непонятно, почему нет вывода. Сообщение, на которое я ссылался, указывало, что выходные данные должны быть перехвачены, чтобы определить, есть ли обновления, но похоже, что, возможно, мне следует просто использовать код выхода, чтобы определить, есть ли обновления, и соответственно запустить средство обновления. Не идеально, но если это мой вариант, то это мой вариант.   -  person ce_nort    schedule 15.03.2016


Ответы (2)


Хотя я не знаю причины этого, проблема, похоже, в том, что флаг --checkupdates не возвращает никаких данных. Однако у него есть соответствующий код выхода в зависимости от того, доступны ли обновления. Я переписал свое приложение, чтобы уловить код выхода и соответственно запустить инструмент обслуживания (или нет). По ощущениям хакерский, но работает.

person ce_nort    schedule 16.03.2016

Средство обслуживания сделано, чтобы ничего не возвращать, если нет доступных обновлений. Я отправляю результаты в текстовый файл перед запуском инструмента обслуживания следующим образом:

@echo off
maintenancetool.exe --checkupdates > checkUpdate.txt

findstr /c:"updates" checkUpdate.txt

if %errorlevel% == 0 maintenancetool.exe --script=script.qs
person P-A Gigure joblobob    schedule 12.12.2016