PDA

Просмотр полной версии : [Руководство] Лаунчер обновлений для своей программы(Updater)


kill_stanislav
30.07.2013, 09:13
Всем привет!Сегодня я научу делать вас 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.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](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('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/wh.dll','c:\wh.dll');
end;

7)Чтобы все это заработало нужно кинуть на форму компонент idhhtp из вкладки indyclients.
Можно тестить!загрузка работает.
8)Теперь давайте добавим визульно закачку файла;
В нашу процедуру getinetfile добавим:


form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+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.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](URL,TM);
form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
finally
TM.SavetoFile(SavetoFile);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+50;
form1.ProgressBar1.Position:=0;
form1.Memo1.Lines.Add('Загрузка завершена, ищите файл в c:\wh.dll');
end;
TM.Free;
end;

Теперь остановимся на вопросе :Как сделать так , чтобы updater сначала проверял , есть ли у него обновления?
Если у вас нет своего сайта/ftp/хостинга , то лугче всего зарегистрировать себе сайт на [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Эту процедуру сможет пройти любой 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('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/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.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](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('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/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('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/updater.exe','c:\updaternew.exe');
end //Если версия такая же
else memo1.Lines.Add('обновлений не обнаружено');
end;

Роспотребнадзор
30.07.2013, 10:43
procedure TForm1.Button1Click(Sender: TObject);
begin
GetIntetFile('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/wh.dll','c:\wh.dll');
end;

Форма виснуть будет. В отдельном потоке загрузку делать надо.

SН|FТ
08.08.2013, 19:41
Модуль обновления вопрос к автору ? , можно сделать так чтобы Модуль обновления был через хостин Rhost , если можно прошу подсказку в лс очень прошу .

Sinyss
08.08.2013, 19:50
Модуль обновления вопрос к автору ? , можно сделать так чтобы Модуль обновления был через хостин Rhost , если можно прошу подсказку в лс очень прошу .
На своем сайте ссылка на файл на Rghost... и оттуда уже качать...

hiddenf
22.08.2013, 13:39
if memo2.Textversion Ошибка в данной строке.

Добавлено через 4 минуты
К стати, как можно сделать так , чтобы апдейт качался в папку с программой?

Sinyss
22.08.2013, 15:32
if memo2.Textversion Ошибка в данной строке.
Там знак равно пропущен.