На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Обновление программы через интернет
      Цитата Mischka @ 10.01.05, 06:43
      ага :) И на стартовой странице яндекса выложить последний номер своего обновления :)

      ;) Ну Яндэкс это условно :) Конешно и мэмо не стоит применять для подобных целей. Я думаю лучше переменную завети типа String и в HTML прописать цифру следующей версии т.е. новой, а потом проверять переменную стринг... Короче хорошая идея! Спасибки за идею!

      Добавлено
      Значит с Вашей помощью я разобрался с инициализацией обновления... А вот как организовать саму закачку файла (предположим zip). Нашол примерчик воттакой:

      ExpandedWrap disabled
        function GetInetFile(const fileURL, FileName: String): boolean;
        const BufferSize = 1024;//
        var hSession, hURL: HInternet;
        Buffer: array[1..BufferSize] of Byte;
        BufferLen: DWORD;
        f: File;
        sAppName: string;
        begin
           Result:=False;
           sAppName := ExtractFileName(Application.ExeName);
           hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
                 nil, nil, 0);//Коннект к инету и возвращает дескриптор сесии
           try
              hURL := InternetOpenURL(hSession,
              PChar(fileURL),nil,0,0,0);//открываем URL
              try
                 AssignFile(f, FileName);
                 Rewrite(f,1);
                 repeat
                    //Читаем инфу дескриптора hURL в буфер
                    InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
         
                    BlockWrite(f, Buffer, BufferLen)//Запись из буфера в файл
                 until BufferLen = 0; //При нулевом колличестве бит для чтения-выпрыгует
                 CloseFile(f);//Закрываем результат закачки
                 Result:=True;
              finally
              InternetCloseHandle(hURL) //Закрываем установленное подключение
              end
           finally
           InternetCloseHandle(hSession)
           end
        end;
         
        procedure TForm1.Button1Click(Sender: TObject);
        var FileOnNet, LocalFileName: string;
        begin
           FileOnNet:='http://screwaka.nm.ru/1.JAD';
           LocalFileName:='1.jad';
           if GetInetFile(FileOnNet,LocalFileName)=True then
              ShowMessage('Закачал.')
           else
              ShowMessage('Не закачал.')
        end;


      Да он (пример) вполне рабочий. Хотелось бы организовать закачку файла с помощью стандартных средств Delphi, т.е с помощью компонентов... Использовать WinInet в данном случае не хочется. Та и вообще WinAPI не люблю. Читать сложно (для меня), а ещё сложней разбираться в своих шэдеврах годичной давности. Вечно у меня глюков и ошибок куча, которые потом сложно выловить...

      Эта тема была разделена из темы "Автоматическое обновление."
      Сообщение отредактировано: screw_aka_viktor -
        Вот ещё примерчик (тоже постил уже, плохо искал):
        ExpandedWrap disabled
          uses
            {...,}IniFiles, UrlMon,
           
              type
            TForm1 = class(TForm)
              {...}
            private
              winsc: TiniFile;
              old: Integer;
              vernfo: TIniFile;
            end;
            
          implementation
           
          {$R *.dfm}
           
          function DownloadFile(Source, Dest: string): Boolean;
            { Function for Downloading the file found on the net }
          begin
            try
              Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;
            except
              Result := False;
            end;
          end;
           
          function GetPathPath: string;
            { Retrive app path }
          begin
            Result := ExtractFilePath(Application.ExeName);
          end;
           
          procedure TForm1.DownLoadNewVersion1Click(Sender: TObject);
          var
            apath: string;
            new: Integer;
          begin
            // This is the exact code from my application
            apath           := GetPathPath;
            Gauge1.Progress := 0;
            StatusBar1.SimplePanel := True;
            StatusBar1.SimpleText := 'Connecting to http://tsoft.home.ro';
            Gauge1.Progress := 20;
            if DownloadFile('http://www.tsoft.home.ro/update.ini', PChar(apath) + '/update.ini') then
            begin
              Gauge1.Progress := 50;
              StatusBAr1.SimplePanel := True;
              StatusBar1.SimpleText := 'Checking for newer versions...';
              vernfo := TiniFile.Create(GetPathPath + '/update.ini');
              new    := vernfo.ReadInteger('version', 'wsc', 7);
              vernfo.Free;
              if (old = new) then
              begin
                StatusBar1.SimplePanel := True;
                StatusBar1.SimpleText  := 'No new version detected';
                Gauge1.Progress        := 100;
              end
              else if DownloadFile('http://www.tsoft.home.ro/winsafe.exe',
                PChar(apath) + '/winsafe.exe') then
              begin
                ShowMessage('Update succeseful');
                Gauge1.Progress := 100;
                winsc           := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
                winsc.WriteInteger('wsc', 'vernfo', new);
                winsc.Free;
              end
              else
                MessageDlg('A new version has appeard but it requires a second install',
                  mtInformation, [mbOK], 0);
            end
            else
            begin
              StatusBar1.SimplePanel := True;
              StatusBar1.SimpleText  := 'Failed to connect probably a internet problem';
              Gauge1.Progress        := 0;
            end;
          end;
           
          procedure TForm1.FormCreate(Sender: TObject);
          begin
            //App version
            winsc := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
            try
              old := winsc.ReadInteger('wsc', 'vernfo', 1);
            finally
              winsc.Free;
            end;
          end;
           
          end.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0199 ]   [ 16 queries used ]   [ Generated: 27.04.24, 12:31 GMT ]