© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
1 июня 2018 г. 18:37

Как правильно реализовать обновление

Хочу сделать обновление, но незнаю как правильно все реализовать.

1. Как делать проверку на выход новой версии? Думаю json файл получать
2. Где хранить файлы обновления?
3. Обновлять все файлы или выборочно?
4. Делать резервные копии файлов, в случае проблем, для отката?
Вопросов много, может не все указал.

1. Да, здесь можно использовать JSON. Вот в этой статье есть пример с JSON файлом

А вот сам процесс обновления можно реализовать с помощью QtIFW, там в принципе есть необходимый функционал для такого. Здесь есть пример сборки как для онлайн, так и для оффлайн версии . Если менять пакет для онлайн версии, то инсталлятор сам уже покажет, что есть нового при запуске и пользователь может выбрать, в общем будет похоже, как в maintenance tool.

Также на форуме поднимался ряд вопросов, касающихся QtIFW

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

3. QtIFW в принципе ответит на этот вопрос.

4. Теоретически стоит, но пока я бы на вашем месте не думал. но сделал бы механизм по сохранению пользовательских save файлов, которые не пострадали бы при обновлении, а саму программу всегда можно переустановить. Если ещё не делали инсталлятор, то тогда убъёте сразу двух зайцев с QtIFW

Собрал инсталлятор, все нормально, но после установки, приложение не запускается.  Требует дополнительные dll файлы, например QtScript.dll и т.д., почему QtIFW собрал не все dll?

И еще вопрос, я объединил проекты в один с под проектами, как мне теперь собирать инсталляторы  для каждого отдельно. В pro вставлять код # Выбираем директорию сборки исполняемого файла

# в зависимости от режима сборки проекта
CONFIG(debug, debug|release) {
    DESTDIR = $$OUT_PWD/../../prog1Debug
} else {
    DESTDIR = $$OUT_PWD/../../prog1Release
}
# разделяем по директориям все выходные файлы проекта
MOC_DIR = ../common/build/moc
RCC_DIR = ../common/build/rcc
UI_DIR = ../common/build/ui
unix:OBJECTS_DIR = ../common/build/o/unix
win32:OBJECTS_DIR = ../common/build/o/win32
macx:OBJECTS_DIR = ../common/build/o/mac

# в зависимости от режима сборки проекта
# запускаем win deploy приложения в целевой директории, то есть собираем все dll
CONFIG(debug, debug|release) {
    QMAKE_POST_LINK = $$(QTDIR)/bin/windeployqt $$OUT_PWD/../../prog1Debug
} else {
    QMAKE_POST_LINK = $$(QTDIR)/bin/windeployqt $$OUT_PWD/../../prog1Release
}

Со сборкой вроде все норм, не правильно разделил по директориям все выходные файлы проекта

  • #
  • Ответ был помечен как решение
  • отредактировано 6 июня 2018 г. 17:30
  • 6 июня 2018 г. 17:29

Как поменять путь, в зависимости от проекта?

    PWD_WIN = $$OUT_PWD\..\..\Prog1Release
или
    PWD_WIN = $$OUT_PWD\..\..\Prog2Release

В принципе я разобрался, сделал проект с под проектами и внутри еще проект с под проектами.  Все работает как хотелось.


Только вопрос появился, пере сборка всегда будет всех под проектов?  То есть при релизе он делает инстолляторы на все проекты.

Я настраивал, чтобы инсталляторы были либо для дебага, либо для релиза.

По сути, как разрулите в QMake, так оно и будет работать.

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
25 июня 2018 г. 11:55
lebendig

C++ - Тест 006. Перечисления

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 11:24
lebendig

C++ - Тест 005. Структуры и Классы

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 8:48
lebendig

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
25 июня 2018 г. 9:34
EVILEG

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Там неправильный подсчёт был по направлению и полный бардак был с поведением, эти 45 градусов исправляли ситуацию. Точную причину уже совсем не помню. А вообще все эти расчёты довольно...
25 июня 2018 г. 9:13
MarkSD

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Здравствуйте, Подскажите, пжлст, как работает этот код : QLineF lineToTarget(QPointF(0, 0), mapFromItem(target, 0, 0));  // Проводим линию от паука к мухе qreal angl...
25 июня 2018 г. 7:51
EVILEG

PyQt5 - Урок 003. QSystemTrayIcon - Как свернуть приложение в трей

Если не ошибаюсь, можно просто удалить вот эту строку central_widget.setLayout(grid_layout) Там указатель на парента передаётся в само размещение, что автоматически заменяет в размещен...
Сейчас обсуждают на форуме
25 июня 2018 г. 17:38
IscanderChe

Иконка исполняемого файла

Спасибо!
25 июня 2018 г. 13:12
Arrow

QComboBox и База данных

И если можно еще один вопрос. Таблицы во вложении. Если писать: mainModel = new QSqlRelationalTableModel(this);mainModel-&g...;
25 июня 2018 г. 7:49
EVILEG

На чём сделан этот сайт?

Добрый день! На сервере сайта установлена Ubuntu 16.04. В качестве сервера используется VDS. Хостинг-провайдер Timeweb . Сайт написан на Django/Python, для...
19 июня 2018 г. 7:56
EVILEG

как редактировать порядок обхода этементов по нажатию TAB в Qt5 qml

Что-то наподобие такого TextField { Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()}

Рекомендуемые страницы