Обновление своей программы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

mrkaban
новенький
Сообщения: 55
Зарегистрирован: 28.05.2016 08:48:18
Контактная информация:

Обновление своей программы

Сообщение mrkaban »

Здравствуйте! Заранее прошу прощения за множество глупых вопросов! Я только начинаю изучать лазарус!

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

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

Находил даже парочку готовых модулей обновления, но ничего не вышло. То, что сам пытался написать не буду даже показывать)) ибо это вообще бред сумасшедшего.

Помогите пожалуйста! Заранее благодарен!
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

mrkaban писал(а):мол в версии 1.1 будет искать на сайте файл версии 1.2.


а потом человек пропустит обновление (инета нет, не видел смысла) и обновление не пройдет. лучше уж вводить проверку на версию большую текущей не привязываясь конкретно к номеру. А вообще, можно на сайте ввести понятие текущей сборки. номер сборки либо зашить в название файла, либо в отдельный файл.

mrkaban писал(а):Вполне пойдет уведомление, мол есть новая версия и скачать можно тут, и отправить на страницу программы.


если уж есть доступ, то легко и скачать.

mrkaban писал(а):То, что сам пытался написать не буду даже показывать)) ибо это вообще бред сумасшедшего.


возможно, и не бред.
mrkaban
новенький
Сообщения: 55
Зарегистрирован: 28.05.2016 08:48:18
Контактная информация:

Сообщение mrkaban »

Думаю Вы правы. Помогите пожалуйста реализовать какой нибудь вариант, а то у меня вообще ничего не получилось нормального.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

mrkaban писал(а):Находил даже парочку готовых модулей обновления, но ничего не вышло.

Каких? Ссылки? Ваш код, как вы прикручивали эти модули?

mrkaban писал(а): То, что сам пытался написать не буду даже показывать))

mrkaban писал(а):ничего не получилось нормального

Да уж покажите, может там всего пару строк подкрутить до идеала.

mrkaban писал(а):ибо это вообще бред сумасшедшего

Кто видел исконный код Фейсбука за голову хватались. А теперь вот поди - Цукерберг миллиардер.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

mrkaban есть готовые компоненты по обновлению, модули по проверке версии программы (в т.ч. обновление). Найти всё это не составляет труда.
Кто видел исконный код Фейсбука за голову хватались. А теперь вот поди - Цукерберг миллиардер.
- у него идея заработала, а не код...
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Если честно, то я об этом пока вообще не думал((( выложите хоть один свой вариант и посмотрим, возможно его удастся привести в нормальный вид.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Можно так сделать: проверка номера версии программы с текущей версией. Версия сборки программы берется из версии файла, версия текущей сборки со своего сайта. К примеру, определенный файл, можно просто ini file с таким кусочкем текста

Код: Выделить всё

[Current]
Version=1.1.1.100

То есть[, например,] при запуске программа закачивает текстовый файл по ссылке http://official-site-of-the-software.ru/info/status.ini, откуда уже считывается информация о последнем релизе/сборке.
Ну а дальше, если есть желание можно реализовать скачивание файла по ссылке. Можно ее даже сделать одинаковой http://official-site-of-the-software.ru/download/your-soft.exe . Это подойдет, если не страшно, что утечет ссылка на программу(, к примеру, она бесплатная).
В случае платной программы надо усложнить процесс скачивания. Алгоритм проверки же текущей версии останется тот же.
Не знал о существовании готовых библиотек/компонент для этого дела. Можете скинуть ссылки?
mrkaban
новенький
Сообщения: 55
Зарегистрирован: 28.05.2016 08:48:18
Контактная информация:

Сообщение mrkaban »

Ichthyander писал(а):Можно так сделать: проверка номера версии программы с текущей версией. Версия сборки программы берется из версии файла, версия текущей сборки со своего сайта. К примеру, определенный файл, можно просто ini file с таким кусочкем текста

Код: Выделить всё

[Current]
Version=1.1.1.100

То есть[, например,] при запуске программа закачивает текстовый файл по ссылке http://official-site-of-the-software.ru/info/status.ini, откуда уже считывается информация о последнем релизе/сборке.
Ну а дальше, если есть желание можно реализовать скачивание файла по ссылке. Можно ее даже сделать одинаковой http://official-site-of-the-software.ru ... r-soft.exe . Это подойдет, если не страшно, что утечет ссылка на программу(, к примеру, она бесплатная).
В случае платной программы надо усложнить процесс скачивания. Алгоритм проверки же текущей версии останется тот же.
Не знал о существовании готовых библиотек/компонент для этого дела. Можете скинуть ссылки?


http://xn--90abhbolvbbfgb9aje4m.xn--p1a ... Lpro11.exe

Ini файл где то через полчаса создам, по такому же адресу можно выложить. Вы скажите что туда написать помимо версии, назвать например update.ini?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

mrkaban писал(а):Вы скажите что туда написать помимо версии, назвать например update.ini?


Например, стандартные настройки программы. тогда, в случае чего, можно будет восстановить их.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

mrkaban писал(а):что туда написать помимо версии

Ну вы блин даете, список причин для обновления. Может пользователю ваше обновление и не нужно вовсе. Допустим у пользователя версия 3. В файле будет список: 2. Обновил кнопку, 3. Исправил расчет, 4. Добавли схему, 5. Перевел на английский. Программа скачивает файл и смотрит: Я = 2-ая версия, значит покажем пользователю все причины, начиная с 3-ей. И выводит "а не хотители поиметь фишки новых версий?: 3. Исправленный расчет, 4. Новую схему и т.д.".
mrkaban писал(а):назвать например update.ini?

Хоспадя, да какая разница? Имя файла будет известно только вам. :)

Лекс Айрин писал(а):Например, стандартные настройки программы. тогда, в случае чего, можно будет восстановить их.

А почему не хранить стандартные настройки в папке программы у пользователя? Загружать их каждый раз при проверке обновления? Лишний трафик, да и вобще как-то нелогично. Смешивание сути - обновление и восстановление. Тогда уж еще один файл под это дело закачать. Опять же разные версии - разные настройки. В чем тайный смысл?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

resident писал(а):А почему не хранить стандартные настройки в папке программы у пользователя?


они там и будут. Это тогда будет лишь метод восстановления работоспособности проги. Хотя, конечно, проще снести файл настроек и развернуть его из самой проги. Так что соглашусь.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Интересней также в этом файле будет хранить прочую динамическую информацию. К примеру, рекламный текст или текст объявлений (акции, пормо), который будут видеть пользователи при запуске программы. Также можно хранить информацию о релизе. К примеру, ньюансы по обновления программы. Тут уж как говорится на что фантазии хватит
mrkaban
новенький
Сообщения: 55
Зарегистрирован: 28.05.2016 08:48:18
Контактная информация:

Сообщение mrkaban »

Код: Выделить всё

var
 version:WideString;
 f:string;
begin
   try
    f:= '1.0.0.0';
    version:=IdHTTP1.Get('http://xn--90abhbolvbbfgb9aje4m.xn--p1ai/images/Lpro-updates.ini');
    if version=f then
     begin
      Application.MessageBox('У Вас самая новая версия программы','Внимание',MB_OK);
     end
    else
     begin
      Application.MessageBox('Появилась новая версия программы, ее можно скачать'+#13#10+'http://xn--90abhbolvbbfgb9aje4m.xn--p1ai/images/Lpro.exe','Внимание',MB_OK);
     end;
   except
    on e:Exception do
     //-//-//-//-//-//
   end; 


Но он ругается:
main.pas(132,14) Error: Identifier not found "IdHTTP1"
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Я не знаю, что у Вас за IdHTTP1 - я использую synapse. Это во-первых. Во-вторых: Вы, видимо совсем новичок. Что Вы этим хотели получить? version=f? Почитайте как работать с ini файлами в Delphi/Lazarus. Или не замарачиваейтесь, а вместо Lpro-updates.ini используйте Lpro-updates.txt, единственным содержимым которого сделайте версию текущей сборки. То есть 1.1.1.1 без каких-либо разметок. Тогда текст этого файла и будет версией файла. Но опять-таки и тут будет неправильным использовать строку напрямую. Вам нужно не просто проверить равны ли строки (кстати тогда Вам нужно использовать SameString(S1, S2) для сравнения), но желательно перевести в числовой формат, к примеру, набор байт XX.XX.XX.XX, чтобы выполнить более полноценное сравнение.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

mrkaban
А можно посмотреть список подключенных модулей? Ну и не помешало бы посмотреть на определение IdHTTP1
Ответить