Updater - это вспомогательная программа, которая проверяет на наличие обновления к другой программе и загружает их;
Для примера я написал пустую программу и её "обновлённую" версию:
Скачать([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
virustotal([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
Создаём в папке с нашим Updater'ом файл "version.txt", где прописываем версию вашей программы. Например:
Цитата:
1.0.0.0
На сервере создаём точно такой же файл;
Запаковываем на сервер "обновленную" версию файла, который вы скачали, в архив "program.rar" и закидываем на сервер;
Если все пункты проделаны, можно переходить к написанию кода.
Теперь отправим Get запрос на адрес, по которому на сервере лежит файл "version.txt", подгружая Response в переменную "s":
Код:
s:=HTTP.Get('http://statia.at.ua/version.txt');
Теперь подгрузим содержимое файла "version.txt", который находится в папке с Updater'ом, в переменную "Version":
Код:
Version.LoadFromFile('version.txt');
Теперь проверим на наличие теста из переменной "s" в переменной "Version" и если текст присутствует, то выдаём окошко с сообщением:
Цитата:
Обновления не обнаружено. Текущая версия программы - последняя
Если же текст отсутствует, тогда выдаём окошко с сообщением:
Цитата:
Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.
Создаём TFileStream и отправляем Get запрос на адрес, по которому на сервере лежит архив с новой версией программы, подгружая Response в переменную "Response"(Собственно, предыдущее действие есть загрузкой файла с сервера на компьютер) Добавляем текст из переменной "s" в переменную "Version" и сохраняем её в файл "version.txt":
Код:
if Pos(s,Version.Text)<>0 then
begin
ShowMessage('Обновления не обнаружено. Текущая версия программы - последняя')
end
else
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
end;
Ну и под конец очищаем переменные:
Код:
HTTP.Free;
Version.Free;
Полный код процедуры нажатия на кнопку:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP:TIdHTTP;
Response:TFileStream;
s:string;
Version:TStringList;
begin
HTTP:=TIdHTTP.Create(nil);
Version:=TStringList.Create;
try
s:=HTTP.Get('http://statia.at.ua/version.txt');
Version.LoadFromFile('version.txt');
if Pos(s,Version.Text)<>0 then
begin
ShowMessage('Обновления не обнаружено. Текущая версия программы - последняя')
end
else
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
end;
finally
HTTP.Free;
Version.Free;
end;
end;
Чтобы проверить работоспособность программы нужно запустить программу, нажать на кнопку, потом изменить файл "version.txt" на сервере и нажать на кнопку ещё раз.
Теперь, когда мы закончили написание программы, запускаем программу и смотрим, что получилось.
Скачать исходник([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
Скачать скриншоты([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
Статья писалась VeTaL_UA для Zhyk.RU. При копировании указывать ссылку на данную тему.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от Dimedrol1536(2)
Как это реализовать?
Кидаешь на форму Panel и вместо этого:
Код:
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
end;
Ставим это:
Код:
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Panel1.Caption:='Выполняется загрузка файла. НЕ ТЫКАЙТЕ ПО ПРОГРАММЕ!!!';
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
Panel1.Caption:='Файл загружён';
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от VeTaL_UA
Кидаешь на форму Panel и вместо этого:
Код:
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
end;
Ставим это:
Код:
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
Panel1.Caption:='Выполняется загрузка файла. НЕ ТЫКАЙТЕ ПО ПРОГРАММЕ!!!';
Response:=TFileStream.Create('program.rar',fmCreate);
HTTP.Get('http://statia.at.ua/program.rar',Response);
Version.Add(s);
Version.SaveToFile('version.txt');
Panel1.Caption:='Файл загружён';
end;
не верно, кидаем на форму IdAntiFreeze который эмулирует работу не блокирующих сокетов, прога будет дергаться, но подвисать наглухо не будет
веталь, дык тут только скачка новой версии, это не апдейтер же, а просто авто качалка новой версии, а для апдейта надо это дело еще все распаковать с заменой, а скачать в ту же папку файл с тем же именем не прокатит тк винда не даст заменить запущеный процесс.
что бы форма совсем не висла, используем класс TThread.
Код:
uses IdHTTP,Classes;
type
TUpdater = class(TThread)
protected
procedure Execute; override;
end;
procedure TUpdater.Execute;
var
http:TIdHttp;
File:TMemoryStream;
Ver:TStringList;
s:string;
begin
http:=TIdHttp.Create;
File:=TMemoryStream.Create;
Ver:=TStringList.Create;
try
s:=HTTP.Get('http://statia.at.ua/version.txt');
if FileExists('version.txt') then
Ver.LoadFromFile('version.txt')
else
exit;
if Pos(s,Version.Text)<>0 then
begin
ShowMessage('Обновления не обнаружено. Текущая версия программы - последняя')
end
else
begin
ShowMessage('Обнаружено обновление. Сейчас начнётся загрузка новой версии программы.');
HTTP.Get('http://statia.at.ua/program.rar',File);
Ver.Add(s);
Ver.SaveToFile('version.txt');
File.SaveToFile('update.rar');
end;
finally
http.Free;
File.Free;
Ver.Free;
end;
end;
код чуть не дописан и на работоспособность не проверен тк писал прямо тут
ну и что б народ тупо не копировал готовый код, это не есть хорошо, тк задача тривиальна
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от Mebius
веталь, дык тут только скачка новой версии, это не апдейтер же, а просто авто качалка новой версии, а для апдейта надо это дело еще все распаковать с заменой, а скачать в ту же папку файл с тем же именем не прокатит тк винда не даст заменить запущеный процесс.
Скачка в архиве была сделана из-за того, что инди не хочет качать exe файл, а желания расписывать, как скачать файл через сокеты вообще не было
Цитата:
Сообщение от Mebius
используем класс TThread
Если бы я начал рассказывать ещё и о работе с класом TThread, то статья увеличилась бы, как минимум, в два раза...
Цитата:
Сообщение от Mebius
кидаем на форму IdAntiFreeze
А вот про него забыл
Цитата:
Сообщение от Mebius
веталь все равно молодец)
Спасибо
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от VortexWhy
Веталь, я сделал но,у меня он часто весит, и не понимаю, что делать?
Весит, вероятно из-за того, что идёт скачка файла и нужно просто подождать.
Цитата:
Сообщение от VortexWhy
я в него встроил Валлхак чтобы продавать,нажимаю чтоб выдал ключ у меня подвисает.
А эту фразу я вообще не понял
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от VortexWhy
Веталь, я сделал но,у меня он часто весит, и не понимаю, что делать?
Если используешь стандартную Delphi, то обнови инди на самую последнюю, она работает куда быстрее и программы будет зависать при скачке на 1-1.5 секунд.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от iLnes
Если используешь стандартную Delphi, то обнови инди на самую последнюю, она работает куда быстрее и программы будет зависать при скачке на 1-1.5 секунд.
Время зависания зависит только от величины файла и скорости интернета. Не думаю, что версия инди сильно влияет...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от iLnes
Проверена на личном опыте, поверь)
Я тоже думал, что бредовая идея, но все таки помогло сократить на 1-1.5 секунды, что порой очень нужно)
В любом случае, эта статья только пример реализации. Я вообще никогда бы не грузил файлы через Indy...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Re: Делаем Updater до программы с помощью Indy. Delphi.
А что если при запуске делать проверку и если есть обновления, то закрывать программу и открывать отдельный модуль и с помощью него производить загрузку основной программы с заменой файлов? как такое реализовать?)
Re: Делаем Updater до программы с помощью Indy. Delphi.
Цитата:
Сообщение от blad56
А что если при запуске делать проверку и если есть обновления, то закрывать программу и открывать отдельный модуль и с помощью него производить загрузку основной программы с заменой файлов? как такое реализовать?)
Эм.
Делаешь еще одну форму, пишешь проверку if ... then
Form2.Show;
else
ExitProcess();
Потом уже сделать самоудаление овновной программы и юзверу уже только останется запустить новую