Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UpDate, Обновление exe-файла 
:(
    Опции темы
CHERRY
Дата 5.5.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.6.2002
Где: Одесса

Репутация: нет
Всего: -2



Есть прога которую пользуют N юзеров в сети. Прога в стадии разработки. Нужно оперативно доставлять update пользователям.
Первое, что приходит на ум, написать загрузчик, который будет проверять есть ли обновление, заменять и затем загружать exe-файл.
Но хотелось бы видеть более изящное решение.
Как Вы думаете?
--------------------
Трясу надежды ветвь, но где желанный плод?
PM MAIL WWW   Вверх
MetalFan
Дата 5.5.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



CHERRY, а по-другому как еще? по любому еще одно приложение должно быть, чтобы главное обновлять)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CHERRY
Дата 5.5.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.6.2002
Где: Одесса

Репутация: нет
Всего: -2



Возможно прога проверяет обновление и если оно есть, то сохраняет его у себя в папке с другим расширением,
а когда идет завершение проги она себя убивает в памяти и переименовывает обновление для следующего запуска.
Потому и задаю вопрос.
Мы часто видим, когда работающая прога предлагает загрузить обновления (например Corel Draw, Adobe-семейства и т.д.)
--------------------
Трясу надежды ветвь, но где желанный плод?
PM MAIL WWW   Вверх
Snowy
Дата 5.5.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



У этих прог есть отдельная программа самообновления.
А для одной программы способов много.
Например написать bat-файл, который перезапишет программу при выходе.
Примеров полно.
Поищи поиском по слову "автообновление"
PM MAIL   Вверх
Poopkeen
Дата 30.10.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.6.2006

Репутация: нет
Всего: нет



вот как реализовано у меня - если еще интересно

в dpr главного проекта
Код


uses appfunc
 
begin
  if not NewExeExists(Application.Handle, Application.Exename, 'options.ini') then
  begin
        Application.Initialize;
        Application.Title := 'Program';
        Application.CreateForm(TPFmainForm, PFmainForm);
        Application.CreateForm(TDM01Form, DM01Form);
        Application.Run;
  end;
      end;
end.


модуль appfunc.pas
берет из инишки строку типа filefrom=\\server\folder\application.exe
extractres - функция из faq'ов по извлечению бинарного файла из программы

Код

function NewExeExists(const AHandle: THandle; const aexename,
  inifilename : string) : boolean;
var
  ri : TIniFile;
  fromstr, tostr, efp1, ff, tf : string;
begin
  result:=False;
  efp1:=ExtractFilePath(aexename);
  ri:=TIniFile.Create(ExtractFilePath(aexename)+inifilename);
  try
    fromstr:=ri.ReadString('RENEW','FILEFROM','');
    tostr:=efp1;
    ff:=fromstr;
    tf:=aexename;
  finally
    ri.Free;
  end;
  IF fromstr<>'' then
  begin
    if FileAge(tf)<FileAge(ff) then
    begin
      result:=True;
      //*********************************************
      if ExtractRes('EXEFILE', 'NEWEXE', 'newexe.exe') then
        if FileExists(efp1+'newexe.exe') then
      begin
        ShellExecute(AHandle, 'open', PChar(efp1+'newexe.exe'),
          PChar('"'+ff+'"'+' '+'"'+tf+'"'), PChar(efp1), SW_NORMAL);
      end;
    end;
  end
end;



модуль newexe.dpr
Код


program newexe;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, ShellApi;

var
  s1, NewStr: string;

begin
  // ParamStr(1) - откуда копировать
  // ParamStr(2) - куда копировать
  if ParamCount>0 then
  begin
    s1:='Установка нового EXE-файла';
    SetLength(NewStr, Length(s1));
    CharToOem(PChar(s1), PChar(NewStr));
    Writeln(NewStr);
    s1:='Подождите, пожалуйста...';
    SetLength(NewStr, Length(s1));
    CharToOem(PChar(s1), PChar(NewStr));
    Writeln(NewStr);
    Sleep(5000);
    CopyFile(PChar(ParamStr(1)), PChar(ParamStr(2)), False);
    WinExec(PChar(ParamStr(2)), SW_NORMAL);
  end;
end.




вроде все smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1138 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.