Пишем лончер обновлений для вашей софтины.[Delphi]

Авторизация
 
  • Автор

    Превед.

    Смотрим, пробуем, критикуем, сопереживаем.
    [spoiler=Пык-з]
    Итак :
    1)Создаем новый проект.(File->New->Application).
    2)Кидаем на форму progressbar из вкладки win32
    3)Memo из вкладки standart.
    4)Кнопку из вкладки standart.
    Должно получиться примерно так:

    http://clip2net.com/clip/m0/1377675420-clip-25kb.jpg?nocache=1

    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/хостинга , то лугче всего зарегистрировать себе сайт на хостингере, например
    Эту процедуру сможет пройти любой h**o 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;

    [/spoiler]

    Подправить под себя - дело 10 минут, ибо дается почти готовый.
    Код кривоватый, но вполне сойдет жи))

    Вы знаете, как отблагодарить.


  • отсюда скопировал максимум что могу дать так это -


  • image

  • Автор

    Gopnik, эта тема от меня на хеппи хаке была еще, один в один давным давно

Авторизация