Лаунчер оновлень для своєї програми(Updater)

124

Всім привіт!Сьогодні я навчу робити вас UPADTER на Delphi .

Отже :
1)Створюємо новий проект.(File->New->Application).
2)Кидаємо на форму progressbar з вкладки win32
3)Memo з вкладки standart.
4)Пункт з вкладки standart.
Повинно вийти приблизно так:

Лаунчер оновлень для своєї програми(Updater)

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
версія:string;
begin
версія:=‘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
версія:string;
begin
версія:=‘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;