Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.02.2016, 08:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию CheckForUpdate

Народ,

За вечер накидал вот такой классик (attached, Delphi 7).

Класс предназначен для проверки наличия новой версии софтины на сайте. На сайт выкладывается маленький xml с описанием текущей версии (собственно верися и описание изменений). Пример xml - version.xml в архиве. Класс берет версию из VersionInfo exe-шника (или можно при создании указать), качает xml с сайта и сверяет их.

Интересует:
1. Советы что можно туда еще приделать и надо ли? (например, парсинг не только своего формата, но и PAD, или вообще задавать путь тегов, или JSON поддерживать, нужна ли поддержка https/ftp/ftps. И т.п.)
2. Сейчас просто сделана проверка по неравенству. Может сделать какой-нить более интересный алгоритм сравнения. Например, сгенерировать большое число из версии и сравнивать его, типа:
1000000*major + 10000*minor + 100*release + build
Вложения
Тип файла: zip CheckForUpdate.zip (7.3 Кбайт, 21 просмотров)
Ответить с цитированием
  #2  
Старый 18.02.2016, 09:53
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

> https/ftp/ftps нужно
> Добавить работу в потоке
> ИМХО, проще смотреть на сервере дату архива с программой, если она "свежее" даты изменения основного файла программы, то качаем архив и распаковываем\устанавливаем
Ответить с цитированием
  #3  
Старый 18.02.2016, 11:51
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
ИМХО, проще смотреть на сервере дату архива с программой, если она "свежее" даты изменения основного файла программы, то качаем архив и распаковываем\устанавливаем
Да, иногда это может понадобиться, когда надо срочно откатить версию назад при обнаружении критической проблемы. Если сравнивать по версии и билду, то придется пересобирать в новый билд, а это может занять больше времени.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 18.02.2016, 11:56
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

И еще, лучше хранить не весь пакет, а именно патчи (Diff-файлы), дабы юзверь поживее обновлялся, и была меньше нагрузка на сеть
Ответить с цитированием
  #5  
Старый 18.02.2016, 12:02
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Тогда хранить-таки надо весь, только к каждому файлу иметь хеш. А клиент будет выкачивать только то, хеши чего отличаются. Иначе при обновлении с очень старой версии будут проблемы.
Но пока только проверка, скачивания нет. В текущей реализации имеется в виду, что юзер сам будет ставить.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 18.02.2016 в 12:05.
Ответить с цитированием
  #6  
Старый 18.02.2016, 19:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Именно. Это только сама проверка.
С датой файла сложнее, т.к. надо вычислять временную зону клиента и сервера. И если для клиента это относительно просто, то для сервера это может быть проблемой.

Вся идея была в том, что бы держать маленький файлик с номером крайней версии и коротким описанием изменений. Класс просто обеспечивает относительно удобный интерфейс к получению этого файла и выяснению свежее он текущей версии или нет. Реализация самого обновления на ответственности программиста. Например, для моих проектов проще открыть просто ссылку на скачивание, нежели городить огород с дифами или разными другими механизмами.

По поводу https/for - видимо, надо переписать на что-то другое, например internetReadFile, что бы с openssl не заворачиваться и не тянуть за собой эти либы. Хотя опять же, сейчас для моих проектов простого http достаточно...

А вообще, кто-то хоть поигрался с этим? Замечания к текущей версии есть (в том функционале как она сейчас)?

Последний раз редактировалось lmikle, 18.02.2016 в 19:35.
Ответить с цитированием
  #7  
Старый 19.02.2016, 13:08
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Из всего вышесказанного назрел вопрос: "И к чему было спрашивать ?"

ЗЫ
Хотя бы потоки добавьте или асинхронный вызов с событиями об окончании скачки, возможность получения и установки настроек прокси, подробную обработку ошибок, возможность скачки при простое системы, оценку загруженности канала, скорости и времени скачки и т.п.)))
Ответить с цитированием
  #8  
Старый 19.02.2016, 19:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

смысл спрашивать был в следующем:
1. Может протормозил и пропустил какой-нить косяк
2. Оценить полезность не только для меня
3. Получить оценку фич/идей для развития
Ответить с цитированием
  #9  
Старый 19.02.2016, 22:45
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
смысл спрашивать был в следующем:
1. Может протормозил и пропустил какой-нить косяк
2. Оценить полезность не только для меня
3. Получить оценку фич/идей для развития
Посмотрел.
Честно говоря, слишком перемудрено и в куче функционала всего понемногу, что лишь ограничивает область функциональности объекта.
Всякие самодельные парсеры и всякую прикладную хрень желательно передавать внутрь класса/функции, так же поступить и с сетевыми компонентами.
Я вот захочу заюзать какой-то свой кастомный сетевой протокол (или какой-нибудь свой формат файла, например pdf), мне придется твой объект допиливать, чего не хотелось бы.
Если коротко, то какая цель этого компонента? Только сверить цифры версии? И как быть, если у меня версия не в виде «1.2.3.4» а что-нибудь типа «1.001.dev.alpha-1.3»?

З.Ы. Жесть
Код:
function TCheckForUpdate.IsSameVersions: Boolean;
begin
  If (Not FHasCurrentVersion) Or (Not FHasRemoteVersion)
    Then Result := False
    Else
      Begin
        Result := True;
        If vcMajor In FVersionChecks Then Result := Result And (FCurrentMajor = FRemoteMajor);
        If vcMinor In FVersionChecks Then Result := Result And (FCurrentMinor = FRemoteMinor);
        If vcRelease In FVersionChecks Then Result := Result And (FCurrentRelease = FRemoteRelease);
        If vcBuild In FVersionChecks Then Result := Result And (FCurrentBuild = FRemoteBuild);
      End;
end;

Извиняюсь за жесткую критику.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 19.02.2016 в 22:48.
Ответить с цитированием
  #10  
Старый 20.02.2016, 02:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да нет, все нормально.
Хотя если передавать и доунлоадер и парсер и компаратор, то что останется от класса? Просто обертка, вызывающая все это переданное...

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

По поводу версий - естественно, код писался под мои проекты... так что есть специфика (на все про все ушло меньше 2 часов вместе с отладкой).

ЗЫ. По поводу этого кода - собственно, в начале на тему сравнения версии вопрос был в начале... мне он тоже не нравится...
Ответить с цитированием
  #11  
Старый 20.02.2016, 08:52
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Храните дату компиляции на сервере и сравнивайте с вычисленной локально, плюс к этому можно хеши, что позволит самовосстанавливаться программе, если ее поразил вирус или ломанули

Последний раз редактировалось Vayrus, 20.02.2016 в 09:26.
Ответить с цитированием
  #12  
Старый 20.02.2016, 09:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
Хотя если передавать и доунлоадер и парсер и компаратор, то что останется от класса?
Останется условие IsSameVersions.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter