Поддержка обновлений в программе

5 минут на чтение
Здравствуйте, в этой стать, я хотел бы рассказать, как я в своих проектах делаю поддержку обновлений программы (выдача ссылки на новую версию программы). Кроме обновления программы (выдача ссылки на скачку новой версии программы), я расскажу, как именно сделать проверку на наличие новой версии программы. У кого-то есть свои может примеры, свои алгоритмы, но я расскажу какой прием именно я применяю. Что нам понадобится для этого — нам понадобится какой-нибудь фтп-сервер, где будет храниться наша обновленная версия программы, а также информация о текущей версии программы. Это может быть не обязательно фтп-сервер, это может быть какой-нибудь файлообменник, но на все эти файлы (программу обновленную и файл с версией программы) обязательно должны быть постоянные ссылки. Если есть фтп-сервер, то на нем необязательно должны быть постоянные ссылки, там можно создать папку и просто сканировать ее на файлы, которые там есть. Тем более, если кто-то занимается серьезно разработкой программного обеспечения и распространяет его, то наверняка должен быть у данного разработчика сайт, а вместе с ним и фтп, так что для обновлений я думаю Вам не жаль будет 50 мб свободного места на Вашем фтп-сервере, а то и меньше. Далее мы создаем на нашем фтп-сервере папку update, например, в которой будет находиться текстовый файл и сама обновленная программа (файл программы с последней версии). В самом текстовом файле у нас будет храниться текущая версия нашей программы, кроме этого в одном текстовом файле, если у Вас несколько программ, в которых необходимо сделать обновление программы, можно хранить версии для всех Ваших программ. После того, как у нас создана папка на фтп-сервере и там подготовлен файл, где хранятся наши версии программ, нам необходимо записать туда текущую версию программа в данный текстовый файл. После этого в нашей программе необходимо также написать версию программы, например записать в какой-нибудь TLabel, который находится во вкладке о программе и на нем будет написана текущая версия программы. Можно хранить версию в программе в каком-нибудь текстовом файле, в ini-файле, в реестре, без разницы, кому как удобно это делать.
В итоге у нас получается следующее: есть программа, на фтп-сервере есть текстовый файл, в котором хранится текущая версия программы, например 1.0.1, в самой программе (в реестре, в ini-файле) также записана текущая версия программы — 1.0.1. Что мы делаем дальше, дальше мы добавляем пункт меню или кнопку в программу, что-то наподобии — «Проверка обновлений» и по нажатию на эту кнопку мы будем сверять версию, что находится на сервере, с версией, которая находится в программе, если они совпадают, то выводим сообщение о том, что у Вас самая новая версия программы, если они не совпадают, то выводим сообщение о том, что появилась новая версия программы и показываем ссылку на скачку, либо говорим о том, что можно скачать на сайте разработчика новую версию программы. Насчет ссылки на программу, можно ее сразу вшить в программу, если делать ее постоянной, например вот такой https://site/update/program.exe, то есть на сервере придется просто заменять exe файл программы, а ссылка у нас будет постоянной, можно просканировать папку на фтп-сервере на наличие exe-файлов и выдать тот файл, который там находится, но в данном случае мы сделаем как постоянная ссылка на файл программы.
Делать наличие проверки обновлений у себя в программе очень удобно и популярно, так как пользователь пользуется программой и может сделать проверку обновлений в любое время, при этом ему ненадо заходить на сайт и смотреть последнии версии программы и качать ее. Кроме этого сразу же из программы можно и скачать последнюю версию, это очень удобно для пользователя, а также он экономит свое время. Для получения версии программы на фтп-сервере мы будем использовать компонент TIdHTTP, кроме этого нам понадобится кнопка TButton, по нажатию на которую и будет производиться проверка обновлений. Что происходит с программами, которые у пользователей. Допустим, у нас на сервере записана версия программы 1.0.1, в программе также записана версия программы 1.0.1, мы выпускаем новую версию программы, в самой программе мы меняем версию программы (в текстовом файле, в TLabel, просто записать как обычной константой), например, на 1.0.2, на сервере делаем тоже самое, в текстовом файле мы ставим 1.0.2. Далее у пользователя, у которого версия программы 1.0.1, он нажимает на кнопку «Проверить обновление», сверяются версии на фтп-сервере и в программе, естественно они не совпадают и пользователю предлагают скачать новую версию программы.
Далее, когда он скачивает, то в новой версии программы вшита версия программы, точно такая же как и на сервере, в итоге он уже не сможет ее обновить, пока не выйдет следующая версия, и пока не измениться версия на фтп-сервере. Итак, я написал следующий код программы, который проверяет наличие обновлений
procedure TForm1.Button1Click(Sender: TObject);
var
 version:WideString;
begin
   try
    version:=IdHTTP1.Get('https://devdelphi.ru/update/version.txt');
    if version=Label1.Caption then
     begin
      Application.MessageBox('У Вас самая новая версия программы','Внимание',MB_OK);
     end
    else
     begin
      Application.MessageBox('Появилась новая версия программы, ее можно скачать'+#13#10+'https://devdelphi.ru/update/project.exe','Внимание',MB_OK);
     end;
   except
    on e:Exception do
     //-//-//-//-//-//
   end;
end;
Это тестовый пример, Вы можете изменить в программе версию программы и увидите, что Вам покажет сообщение о том, что есть новая версия программы, а это уже гарантирует о том, что мы сделали все верно и что обновление нашей программы будем работать правильно. Так что делайте поддержку обновлений в Ваших проектах, экономьте время пользователей Ваших разработок.
Вообщем как-то так я делаю поддержку обновлений в своих программах, вроде бы меня все устраивает.
Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Всем доброго времени суток. Давненько я не писал ничего про MapWindow GIS в Delphi. Может оно и к лучшему, так как летом вышла очередная новая версия данного ActiveX-компонента, в которой наконец-то появилась поддержка Google-карт. Мы уже с Вами рассматривали ...
И снова здравствуйте, немного подумал о тех проблемах, которые могут возникнуть при создании вашей программы (приложения) и пришел к тому, что возможно некоторым необходимо прятать картинки, иконки именно в своей программе, можно в файле ресурсов, но я хотел б...
Итак, в свое время я делал для себя программу, которая должна была считывать текущие настройки сети и показывать их в программе. Далее, я мог эти настройки сохранить в файл, кроме этого, я мог ввести настройки сети (TCP/IP — ip-адрес, маску, dns-сервера) вручн...