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


Автор: bagos 27.1.2009, 14:19
Нужно обновлять exe и пару .cfg, пару .doc, xls файлов.

Наверняка существуют готовые компоненты. Посоветуйте, дабы не хочется создавать велосипед.

Кто как решил этот вопрос? Буду благодарен на алгоритм, за исходник тоже;))

Добавлено через 4 минуты и 58 секунд
Причем  обновления должны скачиваться с локального сервера на котором http не стоит

Автор: Virtuals 28.1.2009, 09:43

Цитата(bagos @  27.1.2009,  14:19 Найти цитируемый пост)
Причем  обновления должны скачиваться с локального сервера на котором http не стоит

а что там стоит?
FTP?
или тупо через NetBios с расшареной папки?

ЗЫ лично я ничего не изобретал, если с расшареной папки, то:
формирую обновление как SFX архив, в нем все нужные файлы для обновления, и указание пути в программфалах где прога стоит, сначало распаковывается маненькая прога "киллер", запускается - прибивает запущеный софт, распаковывается архив поверх, и запускается рабочий софт. все никаких велосипедов.

Автор: bagos 28.1.2009, 13:51
обновление будет в расшаренной папке "мои документы", как туда подключится чтобы скачать обновление?

Автор: Ildar 28.1.2009, 14:09
Цитата(bagos @ 28.1.2009,  13:51)
обновление будет в расшаренной папке "мои документы", как туда подключится чтобы скачать обновление?

Используйте обычную функцию копирования файлов.
Имя источника задавайте как полный путь (\\PCNAME\myfolder).

Автор: bagos 28.1.2009, 14:40
Код

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);
      try
         AssignFile(f, FileName);
         Rewrite(f,1);
         repeat
            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 := '\\Router\public\123123123123.txt';
   LocalFileName := 'C:\gg.txt';

   if GetInetFile(FileOnNet,LocalFileName) = True then
      ShowMessage('Download successful')
   else
      ShowMessage('Error in file download');
end;


Добавлено через 3 минуты и 54 секунды
Хрень какая то, создает файл gg.txt очень большого размера. Наверно неправильно подключаюсь к расшаренной папке?

Автор: Virtuals 28.1.2009, 14:50
bagos
Цитата(bagos @  28.1.2009,  13:51 Найти цитируемый пост)
обновление будет в расшаренной папке "мои документы", как туда подключится чтобы скачать обновление?

очень не рекомендую расшаривать папку мои документы, будут проблемы с доступом!

Автор: bagos 28.1.2009, 15:12
по поводу моих документов это я образно. разумеется будет использоваться другая папка.

Все равно не пашет как надо:(

Автор: bagos 10.2.2009, 13:17
Кто то же сталкивался с данной темой? Напишите как решили!

Автор: Ildar 10.2.2009, 14:29
Цитата(bagos @  10.2.2009,  13:17 Найти цитируемый пост)
Напишите как решили! 


Есть функция:
Код

procedure GetFileThrowShare(Path: String);
var bLoaded: Boolean;
begin
  bLoaded:= CopyFile(PChar(Path), PChar(ExtractFilePath(ParamStr(0)) + ExtractFileName(Path)), False);
  if not bLoaded then
    ShowMessage('copy result:' + BoolToStr(bLoaded, True) + ' error:' + SysErrorMessage(GetLastError))
  else
    ShowMessage('copy result OK: ' + BoolToStr(bLoaded, True));
end;


Вызывается так:
Код

GetFileThrowShare('\\10.1.2.117\tmp\stat.xml');


Все ShowMessage уберите, у меня там вообще функция логирования вызывается.
Как я выше в этой ветке написал, используйте обычную функцию копирования. У меня все работает.

Автор: bagos 10.2.2009, 14:52
Спасибо! То что надо!

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