Лаунчер обновлений для своей программы(Updater)
Автор: Mavgic | Дата: 25-04-2013, 11:50 | Комментариев: 0 | Просмотров: 11 530
Всем привет!Сегодня я научу делать вас UPADTER на Delphi .
Итак :
1)Создаем новый проект.(File->New->Application).
2)Кидаем на форму progressbar из вкладки win32
3)Memo из вкладки standart.
4)Кнопку из вкладки standart.
Должно получиться примерно так:
5)Теперь начнем кодить.
Для загрузки файла из интернета есть замечательная процедурка=)
Вот ее код:
procedure GetIntetFile(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.idhttp1.Get(URL,TM);
finally
TM.SavetoFile(SavetoFile);
end;
TM.Free;
end;
Вставляете ее после строки
{$R *.dfm}
6)Теперь два раза нажмем на кнопку и у нас появится процедура нажатия на button.
Давайте сделаем так , чтобы по нажатию на кнопку наш файл закачался в c:\ под именем Wh.dll(можно любой файл - для exe - 1.exe и тд).
Должно получиться примерно так :
procedure TForm1.Button1Click(Sender: TObject);
begin
GetIntetFile('http://ваш_сайт/wh.dll','c:\wh.dll');
end;
7)Чтобы все это заработало нужно кинуть на форму компонент idhhtp из вкладки indyclients.
Можно тестить!загрузка работает.
8)Теперь давайте добавим визульно закачку файла;
В нашу процедуру getinetfile добавим:
form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+25;
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+50;
form1.ProgressBar1.Position:=0;
form1.Memo1.Lines.Add('Загрузка завершена, ищите файл в c:\wh.dll');
В итоге должно получиться примерно так:
procedure GetIntetFile(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.idhttp1.Get(URL,TM);
form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+25;
finally
TM.SavetoFile(SavetoFile);
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+50;
form1.ProgressBar1.Position:=0;
form1.Memo1.Lines.Add('Загрузка завершена, ищите файл в c:\wh.dll');
end;
TM.Free;
end;
Теперь остановимся на вопросе :Как сделать так , чтобы updater сначала проверял , есть ли у него обновления?
Если у вас нет своего сайта/ftp/хостинга , то лугче всего зарегистрировать себе сайт на http://narod.yandex.ru/?ncrnd=630
Эту процедуру сможет пройти любой homo sapiens=)
НУ вот , за 5 минут вы создали сайт и уже сидите в админке.
Заходим в управление файлами и загружаем туда , например wh.dll(то,что будет качать ваш упдатер),updater.exe(новая версия updater'a и versionupdater.txt.
Опишу алгоритм работы updater'a:
1)Программа идет на ваш сайт и качает versionupdater.txt.Если версия будет другой(в программе) ,
то она выводит в memo 'Есть обновление , для закачки нажмите кнопку обновить updater'.
Если нету , то выводит 'Обновлений updater'a не обнаружено'.
2)Тоже самое с wh , только файл версий будет - versionwh.txt
Алгоритм мы написали , теперь будем кодить)
Чтобы при запуске программы она проверила свою версию , нужно
1)Поместить на форму второй memo и сделать его visible:=false(невидимым),поместить вторую кнопку(по ней будет обновляться updater.
2)Заходим в events формы и на событие onshow(программа показалась) прописываем следующий код:
var
version:string;
begin
version:='1.0';//наша версия
memo1.Lines.Add('Ваша версия updater = '+version);
GetIntetFile2('http://ваш_сайт/versionupdater.txt','c:\windows\upd.txt');
memo2.Lines.LoadFromFile('c:\windows\upd.txt');
if memo2.Textversion then //Если версия другая то
begin
memo1.Lines.Add('обнаружена новая версия updater = '+memo2.Text);
memo1.Lines.Add('Для закачки нажмите на кнопку обновить updater');
end //Если версия такая же
else memo1.Lines.Add('обновлений не обнаружено');
end;
Так же добавьте следующую процедуру для Загрузки обновления.
procedure GetIntetFile2(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.idhttp1.Get(URL,TM);
finally
TM.SavetoFile(SavetoFile);
form1.Memo1.Lines.Add('Успешно');
end;
TM.Free;
end;
Чтобы это работало , нужно залить на сайт versionupdater.txt (в нем строчка , например 1.0).
Версия программы меняется в исходе .
Теперь по нажатию на кнопку пихаем этот код:
var
version:string;
begin
version:='1.0';//наша версия
memo1.Lines.Add('Ваша версия updater = '+version);
GetIntetFile2('http://ваш_сайт/versionupdater.txt','c:\windows\upd.txt');
memo2.Lines.LoadFromFile('c:\windows\upd.txt');
if memo2.Textversion then //Если версия другая то
begin
memo1.Lines.Add('обнаружена новая версия updater = '+memo2.Text);
memo1.Lines.Add('Закачка производится в c:\updaternew.exe');
GetIntetFile2('http://ваш_сайт/updater.exe','c:\updaternew.exe');
end //Если версия такая же
else memo1.Lines.Add('обновлений не обнаружено');
end;
Пароль на все архивы: hh
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.