Delphi 7 - Автоапдейт программы. (Мой способ).

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by lolzR, 26 Apr 2012.

  1. lolzR

    lolzR New Member

    Joined:
    27 Mar 2012
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Delphi 7 - Автоапдейт программы.

    1. Создаем файл version.php с содержанием 1.00 (версия программы).
    2. Кидаем на форму компонент idHTTP.
    3. Кидаем на форму Memo делаем его невидимым (Visible:=false).
    4. Добавляем в uses shallpi.
    5. Добавляем проведуру update.
    6. Заливаем на Ваш сайт файл version.php (в котором вы каждый раз будете обновлять версию Вашей программы) и lastversion.exe (который при выходе новой версии тоже нужно заменять).

    procedure update;
    var
    q:tmemorystream;
    w:hwnd;
    var f:TextFile;
    begin
    ShowMessage('Сейчас программа обновит свою версию!');
    q:=TMemoryStream.Create;
    Form1.idHTTP1.Get('http://yourwebsite.com/lastversion.exe',q); //Загружаем последнюю версию программы.
    q.SaveToFile('0'+Application.Title+'.exe'); //Сохраняем ее как
    AssignFile(f,'update.bat'); //Пишем батник
    ReWrite(f); //Перезапись (если батник с таким названием уже есть)
    WriteLn(f,'@echo off');
    WriteLn(f,'ping -n 2 127.0.0.1 > NUL'); //Задержка 2 секунды
    WriteLn(f,'del "'+Application.Title+'.exe"'); //Удаляем старую версию программы
    WriteLn(f,'rename 0'+Application.Title+'.exe '+Application.Title+'.exe'); //Переименовываем 0*.exe в *.exe
    WriteLn(f,'start '+Application.Title+'.exe'); //Запускаем программу
    WriteLn(f,'del "%0" >nul'); //Самоуничтожение батника
    CloseFile(f);
    Application.Terminate; //Закрываем программу
    ShellExecute(Handle, 'open','update.bat', nil, nil, SW_HIDE); //Запускаем батник
    end;

    Код проверки на обновление:

    Form1.Memo1.Text:=Form1.IdHTTP1.Get('http://yourwebsite.com/version.php'); //Записываем версию программы в Memo.
    if Form1.Memo1.text = '1.0' then //Если версия программы = 1.0 то (в нашем случае ничего не происходит)

    else //И так понятно, если версия программы написанная в файле отличается от нашей то
    update; //Вызов процедуры обновления

    Если вы хотите сделать "проверку на обновление" по кнопке, то засуньте этот код в кнопку.

    Если же вы хотите "автообновление", то засуньте этот код в FormCreate.

    P.S/ Не забывайте с каждой новой версией изменять ее в коде проверки на обновление, и в файле version.php

    А так же каждый раз загружать новый lastversion.exe
     
    #1 lolzR, 26 Apr 2012
    Last edited: 26 Apr 2012
  2. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Ну Memo то зачем???

    Не судьба хотя бы так :
    Code:
    function VersionGet : String;
    begin
        Result := Trim(Form1.idHTTP1.Get('http://yourwebsite.com/version.pony')); //Качаем файл с версией
    end;
    И проверять так :
    Code:
    if VersionGet = '1.0' then //Если версия программы = 1.0 то (в нашем случае ничего не происходит)
    
    else //И так понятно, если версия программы написанная в файле отличается от нашей то
    update; //Вызов процедуры обновления
     
    1 person likes this.
  3. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Без обработки исключений как только серв с обновлениям ляжет все превратиться в УГ, согласен с
     
  4. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Зачем что-то скачивать?
    Не проше создать страницу site.ru/update.php с содержанием 1.0 и проверять версию из программы?
     
  5. ChymeNik

    ChymeNik Member

    Joined:
    31 Aug 2010
    Messages:
    29
    Likes Received:
    7
    Reputations:
    9
    Код конечно очень плохой. Но не трудно переделать под себя..:)
     
Loading...
Similar Threads - Delphi Автоапдейт программы
  1. Peja
    Replies:
    0
    Views:
    2,693