Russian Qt Forum
Ноябрь 23, 2024, 20:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Автоматическое обновление клиента через интернет (по сети)
Страниц:
1
[
2
]
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Автоматическое обновление клиента через интернет (по сети) (Прочитано 21412 раз)
Reklats
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #15 :
Июнь 29, 2012, 12:44 »
Цитата: Bepec от Июнь 29, 2012, 12:12
boost - это C++. Qt это С++. Найдёте разницу?
Boost, Qt - это библиотеки. Части целого. Это как рассказывать о вашей пятке как об отдельной личности.
А если по теме, то можно обойтись хранением обычных статичных образов. Во избежание всяких проблем с версиями, реестром и т.д.
Просто скачивать файл с версией (тут можно даже не xml а просто plain text), сравнивать и выкачать.
И не придумывать всяких Франкенштейнов
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #16 :
Июнь 29, 2012, 12:56 »
можно сделать к программе инсталлятор, и если есть обновления, то скачивать и запускать новый инсталлятор, чтобы он обновил программу.
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #17 :
Июнь 29, 2012, 13:09 »
Мой франкенштейн будет быстрее ваших образов % на 150.
Плюс у программы будет автоматическая проверка целостности при каждом запуске. Плюс размеры закачиваемых файлов.
Сравните что лучше:
Верес'штейн Reklats'штейн
Размер закачки варьируется при необходимости Размер закачки стабилен и равен установщику программы
Как вывод - можно восстановить любой файл за максимально короткое время Как вывод - чтобы восстановить 1 файл, нужно качать полный образ
Проверка целостности файлов программы(сравнение хеша файлов)
Отсутствует
Автовосстановление программы/исправление испорченных файлов
Отсутствует
Замена 1 файла в билде = заливка 1 файла на сервер Замена 1 файла в билде = заливка полного образа программы на сервер
Возможность полного восстановления программы(скачивание установщика) Имеется, происходит каждый раз при обновлении
Гибкость в настройке/смене файлов/возможности сборки
Отсутствует
, имеется только замена образов
Автоопределение билда программы!!!
Отсутствует
. Порча информации о билде = фейл
Вроде основные отличия я привёл. Выбирайте сами.
«
Последнее редактирование: Июнь 29, 2012, 13:12 от Bepec
»
Записан
ДвеКопейки
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #18 :
Июнь 29, 2012, 13:53 »
Мои выводы до понедельника:
1. БД - содержит информацию об актуальной версии ПО.
*версии(id, version, current) + файлы(id,name,dirTo,dataBLOB, md5) + смежная(version_id, file_id)
Где
current - флаг на текущую версию, для удобства отката, достаточно переместить флаг на предыдущую версию как все откатится.
dirTo - путь в директорию из местоположения апдейтера.
dataBLOB(varbinary) - содержание самого файла.
md5 - для проверки файлов.
2. Клиент после авторизации на сервере, запрашивает актуальную версию.
3. Проводим сравнение файлов по md5, обновляем
всех
отличающихся.
4. После того, как все необходимые файлы загружены, ПО предлагает перезапустить себя.
5. При завершении ПО, запускается Updater, проверяющий наличие файлов обновлений (возможно читающий xml c инструкциями)
6. Updater при завершении запускает наше ПО.
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #19 :
Июнь 29, 2012, 13:55 »
*аплодисменты* Успехов в начинании.
Записан
Reklats
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #20 :
Июнь 29, 2012, 14:10 »
Итак.
Что мешает зашить в инсталер проверку целостности? Попробуйте поставить Qt инсталером - он стначала проверяет целостность, msi архив тоже проверяет целостность. Тем более система скидывает установочники себе за пазуху, так что потом есть возможность спокойно восстановить программу и не надо заново качать файло.
Проверка целостности файлов, автовосстановление - при запуске проверять. Как вариант - зашить в бинарник хеши.
Автоопределение билда программы - бля, да это просто
Код
C++ (Qt)
#define version "1.2.3.4"
+ считать значения из реестра. Если что не так - восстановиться.
Гибкость в настройке/смене файлов/возможности сборки - если вам нужен конструктор, сходите на рынок и купите. Программа скомпилена с либой версии 1, а вы предлагаете просто заменить её на версию 1.1? Позвольте, а файл с хешами вы тоже будете хранить рядом с бинарником? Или может в реестре
Зачем заменять 1 файл? Если постаралось вирьё, то лучше будет заново запустить инсталер и восстановиться.
При этом не надо будет иметь базу с файлами. Публичная папка или фтп - оттуда и скачивается вся программа.
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #21 :
Июнь 29, 2012, 14:41 »
Я проверку целостности имею в виду целостность уже установленной программы.
У тебя одна маленькая ошибочка. Ты всё зашивать пытаешься в один файл
Ещё и кеши туда зашить, да ещё и систему проверки. Да и автоопределение туда же. (
НЕ МАТЕРИСЬ блин на форуме!
)
Апдейтер же должен быть маленьким, скачивающимся быстро и иметь
функцию докачки
.
При всех твоих манипуляциях у тебя везде вылезает ммм... излишество? Хранить версию билда в реестре + установщик хранить "за пазухой" + всё таскать каждый билд/изменение.
Если постаралось вирьё, шанс что пострадал твой ИНСТАЛЛЕР довольно велики
И качать его заного с полным билдом в прицепе ты будешь довольно долго
База с файлами - необходимость для апдейтера.(нормального такого)
Добивание:
Я уже описал возможности моего подхода и твоего. Ты уже пытаешься передрать часть моего подхода и подцепить к своему, не прерывая спора.
У тебя ставка на простоту и надежду на "вирус попортит всё, а установщик раз и не тронет" и "пользователь не будет потрошить реестр". (Пользователь программу установит и она твой реестр схавает
)
У меня ставка на живучесть и мобильность и простоту.
PS 2 разных подхода, но мой имеет преимущество. Хотя бы потому, что он содран с уже отлизанных, оптимизированных и максимально живучих систем.
Записан
sidsukana
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #22 :
Июнь 29, 2012, 14:51 »
Хорошо, если запаковывать нужное на сервере, то будет тупо архив скачиваться? Т.е либо мы запускаем потом архиватор с параметрами, либо юзер вручную должен будет распаковать. Так? Так вот а если нет архиватора (нонсенс но бывает)? А если и есть то какой запускать? Лучше уж тогда оставить на ручную распаковку. А если самораспаковывающийся собирать, SFX так он только под винду и только под виндой наверное и соберется. У меня на серве линь. Да и в конце концов сами говорите что скорости такие что размер не важен, моя программа в SFX с либами и прочей ерундой будет метров 10 весить. Мне кажется проще готовый пакет отдавать и запускать его.
Для меня важно только то что юзеру не надо переходить на сайт и проверять версию программы, она сама ему напомнит что есть новая версия, и не хотите ли скачать.
Вариант с хешами и проверкой целостности это конечно идеал, но я без него думаю обойдусь пока
Не знаю как автор)
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #23 :
Июнь 29, 2012, 15:06 »
Цитата: Bepec от Июнь 29, 2012, 10:54
PPS самораспаковывающийся архив распаковывается ВНЕ ЗАВИСИМОСТИ от наличия на компе архиваторов. А на сервере он будет, если вы его туда поставите.
Читайте тему. А не тупо пишите посты
Под линь и винду спокойно разделяется как тип, так и установщики. На то и база данных
И повторюсь -
Цитата: Bepec от Июнь 29, 2012, 11:41
sidsukama -мы рассматриваем все варианты. Обобщённый апдейтер так сказать.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #24 :
Июнь 29, 2012, 15:55 »
всё же инсталлер мне кажется лучше всего. Он может и ключи в реестр писать, и за целостностью следит. Проблем гораздо меньше, и реализовать это проще. Программа проверяет обновления, скачивает новую версию, и сигнализирует пользователю, что есть обновления. Пользователь перезапускает программу, и скрипт сперва её обновляет, и потом запускает. Если произошла ошибка, то пользователь сам её решит, почистит место и т.д. Иначе это всё надо будет делать вам вручную. Оно надо?
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #25 :
Июнь 29, 2012, 16:41 »
Алекс - я тебе по секрету скажу - апдейтер должен быть минимален, автономен(не зависеть от реестра) и быть способным восстановить программу.
А то, что ты сейчас сказал - дело 5 минут и 3 классов. И то, я ещё с перестраховкой рассчитываю
И да - пользователь не должен "перезапускать программу". Это должно быть полностью автономным.
PS да, надо
по крайней мере я бы так и сделал. Ибо Опыт, ибо Безопасность(ты сам знаешь что делает каждая часть твоего апдейтера), ибо Независимость(исходя из этого же, см. предыдущие скобки).
PPS Вот случай на этой неделе. Инсталлер инно сетап, собранный в сибири где-то, отказался запускаться на Windows 7 x64. Тупо ничего не говорит, не пишет, лог не ведёт, даже не инициализируется(тупо файл не запускается). И никто, в том числе и его добрый сборщик, незнает почему. увы. Ценой страшных усилий удалось выцепить исходный установочный файл из сибири же
А так я буду уверен за каждый байтик своей программулины.
PPPS То что я предлагаю лишь совет, не указание. Это моё мнение и пока что преимуществ "простоинсталлера" не вижу
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #26 :
Июнь 29, 2012, 16:49 »
Цитата: Bepec от Июнь 29, 2012, 16:41
Алекс - я тебе по секрету скажу - апдейтер должен быть минимален, автономен(не зависеть от реестра) и быть способным восстановить программу.
От реестра может зависеть основная программа. Кто будет писать или удалять ключи? Обычно это делает инсталлер.
Цитата: Bepec от Июнь 29, 2012, 16:41
И да - пользователь не должен "перезапускать программу". Это должно быть полностью автономным.
Ему это и не нужно, а желательно. Инсталлер ещё ничего не установил, он просто лежит на диске и ждёт своего часа.
Цитата: Bepec от Июнь 29, 2012, 16:41
Ибо Опыт, ибо Безопасность
Если ты ГАРАНТИРУЕШЬ, что твой апдейтер не запорет в один момент программу, то я согласен. Мой опыт говорит о том, что ты такого не можешь гарантировать. Однажды он удалит и не восстановит какую-нибудь библиотеку, а ты хлопнешь себя по лбу со словами "блин, а об этом я и не подумал".
Цитата: Bepec от Июнь 29, 2012, 16:41
ибо Независимость(исходя из этого же, см. предыдущие скобки).
NIH синдром
Цитата: Bepec от Июнь 29, 2012, 16:41
PPS Вот случай на этой неделе. Инсталлер инно сетап, собранный в сибири где-то, отказался запускаться на Windows 7 x64. Тупо ничего не говорит, не пишет, лог не ведёт, даже не инициализируется(тупо файл не запускается). И никто, в том числе и его добрый сборщик, незнает почему. увы. Ценой страшных усилий удалось выцепить исходный установочный файл из сибири же
А так я буду уверен за каждый байтик своей программулины.
Кривые руки сборщиков. Все инсталлеры должны быть протестированы на целевых ОС, чтобы отбраковать и починить самый первый ряд ошибок, который могут встретить пользователи. Я так делаю всегда. А каким образом ты уверен за каждый байтик? Это значит, что ты гарантируешь, что в апдейтере не будет багов? Я двумя руками за.
Цитата: Bepec от Июнь 29, 2012, 16:41
Это моё мнение и пока что преимуществ "простоинсталлера" не вижу
Ты фактически предлагаешь написать свой инсталлятор, со своими багами и недостатками, которые нужно будет чинить и добавлять, и в итоге ты напишешь свой INNO Setup.
«
Последнее редактирование: Июнь 29, 2012, 16:53 от Alex Custov
»
Записан
Reklats
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #27 :
Июнь 29, 2012, 17:19 »
Верес, меньше пафоса пожалуйста. И за мат извиняюсь.
На разработку и тестирование вашего многофункционального апдейтера будет потрачена уйма человекочасов. Вы пытаетесь построить мост посреди шоссе.
А если у человека нет инета и прога загнулась? Всякое бывает.
В общем, предлагаю не писать всяких апдейтеров пофайловых, а создать нормальный инсталер и выкачивать его. Сам положится в нужную папку и при необходимости восстановит нужные файлы. Без нета.
Кстати, где гарантия, что вирьё не похерит ваш апдейтер?) И да, если прога не работает - юзер идёт в установку\удаление и восстанавливает прогу. Пихать в готовую прогу ещё и функции диагностики установки - глупо.
Записан
Bepec
Гость
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #28 :
Июнь 29, 2012, 19:12 »
Ну делайте как хотите
Алекс - у меня лежит сейчас вот на диске 2 заготовки - класс для общения клиент-сервер и класс общего назначения (ну куча всяких простых функций в нём)
Потрачу я примерно 5 минут своего времени на создание. Примерно ещё час я сам (лично, по собственному желанию) потрачу на отладку и тестирование
И останется собрать под разные платформы + запуск на виртуалах.
В принципе апдейтер будет готов. Но это МОЙ путь (пафос пафос нагнетаем
) ибо я довольно много участвовал в создании подобных тем.(рабочих тем в смысле
)
Я вам предлагаю апдейтер для любой программы. Абсолютно. Достаточно будет лишь завести записи в базе и залить файлы.
Но опять таки - решайте сами
PS по секрету скажу - я сторонник программ аля " запустилось, сказало - чувак ты у меня в мозге счас темечко вырезал и восстановилась для работы"
Написание такой программы - это задачка та ещё. А пофайловый апдейтер используется в 70% онлайн проектов где-то. Ибо это надёжнее
PPS Хватит спорить! Вы правы и я прав
Давайте уже отдыхать - пятница всё же
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Автоматическое обновление клиента через интернет (по сети)
«
Ответ #29 :
Июнь 29, 2012, 19:39 »
Цитата: Bepec от Июнь 29, 2012, 19:12
Я вам предлагаю апдейтер для любой программы. Абсолютно. Достаточно будет лишь завести записи в базе и залить файлы.
Но опять таки - решайте сами
Ты так и не ответил ни на один вопрос. Как редактировать реестр во время установки, например создать новые ассоциации с расширениями? Как удалить такую программу, вычистив тот же реестр и roaming data?
Можно кстати посмотреть на эти классы ради интереса.
Записан
Страниц:
1
[
2
]
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...