Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обновление программы через интернет


Автор: Tamerlaan 29.8.2007, 17:29
Почитал тут http://excode.ru/art1800p1.html статью, хочу написать обновление для программы, но есть пару вопросов:
1.А если изменений нет в программе, то как это проверить?
2.Как организовать прогресс обновления и скорость скачивания?
3.Как организовать список скачаных файлов?(т.е. мне нужно, чтобы юзверь видел с какой версии и до какой обновился файл, сейчас у меня в программе 1 exe и 1 dll и папки с файлами для проги, желательно, чтобы файлы тоже обновлялись, файлы лежат в подпапках, мне нужно, чтобы юзверь видел ход обновления, скорость и версии файлов считывал и юзверю сообщал, какие были старые, а какие они стали в компоненте отдельном)
4.Также вопрос, как организовать, чтоб можно было создать резервную копию программы и восстановить её оттуда

Помогите, плиз. Спасибо.

Добавлено через 10 минут и 4 секунды
Посмотрел программу DRKB. Вот там есть модуль обновления, примерно такой я и планировал сделать. Помогите пожалуйста

Автор: Alexeis 29.8.2007, 17:42
1) Сначала читать с сайта версию программы и сверять с текущей версией.
2) Делфийские компоненты сами генерят события прогресса, нужно только установить обработчик и в нем  изменять значения прогрессбара.
3) Обойти дерево каталогов программы и составить список файлов. Кроме того на сервере можно хрнить список файлов которые изменились в каждой новой версии.
4) Сделать отдельный каталог и сопировать туда себя и все свои файлы. Аналогично при восстановлении скопировать себя обратно, только это должна делать не сама программа, а дополнительная програмка для обновления или скрипт в файле типа cmd или bat.

Автор: Tamerlaan 29.8.2007, 17:43
Может сделать программу для сервера и клиента и с помощью их проверять?Опишите плиз поподробнее

Добавлено через 3 минуты и 54 секунды
Если можно - напишите плиз на ICQ 253186806

Автор: lukas 29.8.2007, 17:53
Tamerlaan, 

видишь там цикл Repeat вот туда и прикручивай процесс скачивания... предварительно затащив в отдельный процесс..

Автор: Alexeis 29.8.2007, 17:53
А на сервере зачем программа? На сервере достаточно разместить маленький файлик типа Version_Info.txt скачать его и получить информацию о обновленных файлах.

Добавлено через 2 минуты и 11 секунд
lukas, этого уже давно не требуется. Компоненты Indy сами работают с потоками если их настроить, потому не нужно самому ничего создавать и сами оповещают о прогрессе.

Автор: Tamerlaan 29.8.2007, 17:56
Я с файлами почти не работал, я только с БД и ИнтерБэйс, сеть и файлы для меня новое - может подскажете справку или ещё что-нибудь?

Автор: Tamerlaan 29.8.2007, 18:51
Я сделал организацию скачивания файлов, но как добавить остальное(прогресс и т.п.) ненаю, плиз помогите, просто срочно нужно

Автор: Lence 29.8.2007, 23:29
Самый простой тебе способ. Берешь все свои обновления - пакуешь в архив/лепишь новый инстал/ итд. Но все в одном файле. Бросаешь этот файл на сайте. Делаешь страничку update.html где ты пишешь 
Код

ver:1.0.0.1<br>
link:http://www.yuorurl.com/Name_New_Program.rar

и пишешь код ... 
че он делает - лезит на старицу update.html, вырезает в переменные линк и версию... версию тупо ставрнивает со стрингом и если не равны - значит вызывается шелэкзекут и тянется сам файл. Пользователь же сам сохраняет его где ем нада ... исталирует/распаквывает поверх старой. 

Код

procedure TForm1.getUpdate(Sender: TObject);
var
  http1: TIdHttp;
  s, q2, q1: string;

begin
    http1:=TIdHTTP.Create(sefl);
    try
      s:= HTTP1.Get('http://youurl.com/update.html'); // твой HTML где у тебя написана новая верси и ссылка на новый файл
     q1:= Copy (s, Pos ('ver:', s)+4, Pos('<br>', s)+4); // вырезаешь строку от ver: и до конца
     q1:= Copy (q1, 1, Pos('<br>', q1)-1);             // вырезаешь только версию
     q2:=  Copy (s, Pos ('link:', s) + 5, 250);  // вырезаешь link
     if '1.0.0.0' <> q1 then // тут проверяешь 
          begin
               ShellExecute(0, nil,pchar(q2),nil,nil,1);  //если не равны то отрываешь ссылку - и браузер  тебя сам спросит - качать или нет
          end;
    end;
   except
   end;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)