Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обновление программы через интернет


Автор: ShamanDeath 5.5.2008, 07:53
Извините,если были похожие темы,но все равно есть некоторые вопросы.
Моя задача заключается в следующем:
Есть программа для которой нужно реализовать автоматическое обновление. Все файлы программы находятся на ФТП сервере в интернете. Программа содержит множество подпапок в своей структуре. Нужно сделать так,чтобы при запуске модуля обновления программа проверяла новые файлы,если таковы появились. Причем проверка должна быть по размеру файла и дате последнего изменения файла. Если же новые файлы есть,то модуль их качает и перемещает в указанную мной папку(это может быть любая произвольная папка).
Сложность заключается в проверке файлов. Т.е. я не знаю как организовать сбор данных о всех файлах и так чтобы это происходило быстро(файлов очень много), как сверить и скачать и переместить их в папку с программой,заменив старые.При этом база с файлами должна обновиться
Помогите пожалуйста. Ответы тут или ICQ 496232798

Добавлено через 7 минут и 28 секунд
Была даже мысль о клиент-серверной структуре,но опыта не хватает для реализации

Автор: Coder 5.5.2008, 09:58
Нужно создать в корне ФТП сервера файл, где будут храниться даты и размер других файлов. Скачивать себе нужно этот файл и анализировать его - находить изменения. Потом качать только то что нужно.

Автор: Poseidon 5.5.2008, 11:37
Цитата(Coder @  5.5.2008,  09:58 Найти цитируемый пост)
Нужно создать в корне ФТП сервера файл, где будут храниться даты и размер других файлов. Скачивать себе нужно этот файл и анализировать его - находить изменения. Потом качать только то что нужно. 
Так, кстати, делают антивирусы при обновлении баз. А базы у них по несколько мегабайт, про этом качается совершенно не все. 

Автор: ShamanDeath 5.5.2008, 13:14
 smile а можно, пожалуйста, пример для скачивания файла и для проверки двух списков?

Автор: SAVANE 5.5.2008, 13:48
Решал подобную задачу. Вот что я наваял. Там найдеш как вариант. Сори что не редактировал код ща времени нету. Если ниче не получится ПМ я подчистю код и добавлю коменты

Код


 if not InternetCheckConnection('http://www.ya.ru/', 1, 0) then
                begin
                RasTry:=RasTry+1;
                If RasTry=10 then stopmoment:=6;
                sCheckBox3.Checked:=true;
                Timer1.Interval:=5000;
                ConectedVia:=2;
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:='Starting conection RAS';
                LogNum:=LogNum+1;
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:=RasManager1.Name[0];
                LogNum:=LogNum+1;
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:=RasManager1.DeviceName[0];
                LogNum:=LogNum+1;
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:=RasManager1.PhoneNumber[0];
                LogNum:=LogNum+1;
                if RasManager1.Connected[0] then
                        begin
                        rasmanager1.DisConnect(0);
                        RasManager1.Connect(0);
                        end
                else RasManager1.Connect(0);
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:='Start RAS connection';
                LogNum:=LogNum+1;
                end
        else
                begin
                sCheckBox3.Checked:=true;
                sCheckBox4.Enabled:=false;
                logevent[lognum].DataLog:=Date();
                logevent[lognum].TimeLog:=time();
                logevent[lognum].Ivent:='Conecting via LAN';
                LogNum:=LogNum+1;
                ConectedVia:=1;
                stopmoment:=1;
                Timer1.Enabled:=true;
                label14.Caption:='100 Mb/s';
                end;
        end;
1:      Begin
        logevent[lognum].DataLog:=Date();
        logevent[lognum].TimeLog:=time();
        logevent[lognum].Ivent:='Connecting FTP Start';
        LogNum:=LogNum+1;
        NMFTP1.Connect
        end;
2:      Begin
        logevent[lognum].DataLog:=Date();
        logevent[lognum].TimeLog:=time();
        logevent[lognum].Ivent:='Davnload file update status';
        LogNum:=LogNum+1;
                try
                NMFTP1.ChangeDir(ProjectName);
                NMFTP1.ChangeDir(UpdateDir);
                NMFTP1.Download('Update.txt', 'C:\Update.txt');
                except
        trys:=trys+1;
        if trys=1 then browserstart(IndexFile);
        stopmoment:=2;
        abort;
        Timer1.Enabled:=true;
        end;
        logevent[lognum].DataLog:=Date();
        logevent[lognum].TimeLog:=time();
        logevent[lognum].Ivent:='Chek curent status';
        LogNum:=LogNum+1;
        assignfile(f,'C:\Update.txt');
        reset(f);
        readln(f,s);
        closefile(f);
        logevent[lognum].DataLog:=Date();
        logevent[lognum].TimeLog:=time();
        logevent[lognum].Ivent:='status Cheked';
        LogNum:=LogNum+1;
        now:=now+1;
        sCheckbox6.Checked:=true;
while strtoint(s)>=now do
        begin
                Statusbar1.Panels.Items[0].Text:='Dawnloading update list. Status 07.A1';
                        try
                        NMFTP1.ChangeDir(inttostr(now));
                        except
                        trys:=trys+1;
                        if trys=1 then browserstart(IndexFile);
                        stopmoment:=2;
                        abort;
                        end;
                NMFTP1.Download('Scenary.txt', 'c:\'+inttostr(now)+'.txt');
                Statusbar1.Panels.Items[0].Text:='Cheking updatelist. Status 08.A1';
                assignfile(f,'C:\'+inttostr(now)+'.txt');
                reset(f);
                while not EOF(f) do
                        begin
                        readln(f, tempstr);
                        Listbox1.Items.Add(tempstr);
                        s1:=tempstr[1];
                        proc:=strtoint(s1);
                                case proc of
                                1: DeleteFileU(tempstr);
                                2: DeleteDirU(tempstr);
                                3: CreateDirU(tempstr);
                                4: DawnloadFileU(tempstr);
                                //'5': StartBat(tempstr);
                                6: StartReg(tempstr);
                                //'7': StartExe(tempstr);
                                end;
                        now:=now+1;
                        end;
                closefile(f);
                Statusbar1.Panels.Items[0].Text:='Starting update. Status 09.A1';
                Statusbar1.Panels.Items[0].Text:='Update complite. Status 0B.A1';
                NMFTP1.Disconnect;
                end;
        //end;
        Statusbar1.Panels.Items[0].Text:='Curent status of udates is good. Status 05.A1';
        NMFTP1.Disconnect;
        Statusbar1.Panels.Items[0].Text:='Diskonected. Status 06.A1';
        browserstart(IndexFile);
        Statusbar1.Panels.Items[0].Text:='Starting Inform kiosk. Status 06.A1';
        form1.Close;
        end;
end;

Автор: sicher 25.7.2008, 17:39
Столкнулся с такой же проблемой
SAVANE, можно пожалуйста код с коментами

Автор: sicher 25.7.2008, 17:57
у меня совсем маленький опыт программирования, если можно, то покажите пример программы, которая автоматически обоновляется
как обновить примерно понимаю(хотел реализацию как у антивирусников), но реализацию кода не могу сделать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)