Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Общие вопросы > Апдейт программы


Автор: AlkofF 07.05.04, 10:15
Ребятки..а никто случаем не сталкивался с такой задачкой, как релизовать автоматическую проверку на появление более новой версии программы в какой-нить папочке и автоматического же обновления одного экзешника на другой? ну то есть пусть в процессах сидит программулька которая смотрит какой экзешник проги на локальном компе и какая версия в сети сть. Просто приходится сейчас делать так, что народ работает на сыром клиенте. А я параллельно вношу измения и правлю баги :) Если кто поможет, буду премного благодарен!

Автор: dimastdk 07.05.04, 11:44
При создании формы (запуске проги (1)) запускай др. прогу(2) которая будет просматривать каталог, который ты ей пропишешь на наличие более нового файла и после того как прога 2 нашла файл. Закрой програмно прогу 1 и скопируй из папки с заменой файл новой версии проги, после чего запусти прогу 1 , завершив ,после запуска проги1, прогу 2.

И ишо тут: Стирание файла

Автор: Song 07.05.04, 12:52
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    Function GetFileDate(Const FileName: TFileName): TDateTime;
    // © Song
    { Ф-ия определяет дату и время создания файла }
    Var SearchRec: TSearchRec;
    begin
     Result:=Now;
     IF FindFirst(FileName,faAnyFile-faDirectory,SearchRec) = 0 then
      Begin
       Result:=FileDateToDateTime(SearchRec.Time);
       FindClose(SearchRec);
      End; {IF}
    end;
     
    procedure TLoginForm.FormShow(Sender: TObject);
    Var SearchRec: TSearchRec;
        Str: TStringList;
        S: String;
    begin
     IF FileExists(Main.BaseKat + '\Update\' + ExtractFileName(ParamStr(0))) and
        (GetFileDate(Main.BaseKat + '\Update\' + ExtractFileName(ParamStr(0))) >
         GetFileDate(ParamStr(0))) then
      Begin
       MessageDlg('Доступна новая версия программы. Нажмите <Ok>, чтобы её обновить ' +
                  '(дождитесь пока она не запустится снова).',mtInformation,[mbOk],0);
       With TStringList.Create Do
        try
         Add(':Repeat');
          { если есть удаляем }
         Add('IF Exist "' + ParamStr(0) + '" Del "' + ParamStr(0) + '"');
          { если не удалилось переходим снова на удаление }
         Add('IF Exist "' + ParamStr(0) + '" goto Repeat');
          { копируем новую }
         Add('Copy "' + Main.BaseKat + '\Update\' + ExtractFileName(ParamStr(0)) + '" "' + ParamStr(0) + '"');
          { запускаем новую }
         Add('"' + ParamStr(0) + '"');
          { удаляем файл со скриптом }
         Add('del update.bat');
          { Сохраняем файл скрипта }
         SaveToFile('update.bat');
          { Запускаем скрипт }
         WinExec('update.bat', SW_HIDE);
          { Закрываем текущую }
         Application.MainForm.Close;
         Exit;
        finally
         Free;
        end;
      End; {IF}
    ....

Автор: AlkofF 07.05.04, 13:48
Спасибки... я взгляну сегодня вечерком... тока вот вопросы к те, Song... что за update.bat такой.. для чего он нужен? есть ли он или это автосоздаваемый временный файл... и что за ParamStr(0) c Main.basekat

Автор: Song 07.05.04, 16:02
update.bat - файл с помощью, которого собственно программа обновляется.
ParamStr(0) - путь к запущенной программе
Main.Basekat - здесь у меня путь к файлам БД. В нём у меня каталог Update, в котором находится новый exeшник для обновления. Ты можешь конечно пути поменять.

Автор: AlkofF 07.05.04, 19:49
Чаго то не пашет.. в чем дело понять не могу... при запуске у меня появился батник с таким текстом:

:Repeat
IF Exist "c:/base/project1.exe" Del "c:/base/project1.exe"
IF Exist "c:/base/project1.exe" goto Repeat
Copy "c:\base\Update\project1.exe" "project1.exe"
"project1.exe"
del update.bat

Здесь явно бред где-то.. запуск батника дает бесконечный цикл (я не разбираюсь к сожалению в батниках) и вообьще не оч представляю весь поцесс... например есть версия более новая.. и что ж произойдет..ну создастся батник.. а как замена то пройдет..автоматически или батник руками заупскать ? :unsure:

Добавлено в :
я вроде понял откудабесконечный цикл но я сделал все как в листинге что ты мне дал, Song... и не пашет подмена... и вообще странно..дает иногда ошибку при компиляции что нет exe файла...

Добавлено в :
Я никак не могу понять что надо подставлять на мето твоего пармстр(0)... c:/base/project1.exe я везде ставлю, но это не глотаеца... обноление же остаеца для меня загадкой... как все таки этотбатник запускаеца... ведь прога работает в этот момент

Добавлено в :
Лан... вот что вообще-то получилось.. появляеца батник с кодом

:Repeat
IF Exist "c:\base\project1.exe" Del "c:\base\project1.exe"
Copy "c:\base\Update\project1.exe" "c:\base\project1.exe"
"c:\base\project1.exe"
del update.bat


Там третья строчка была еще одна но я ее закоментил потому что она давала цикл как раз.. но мучает вопрос.. почемуже 2 раза выскакивает сообщение о новой версии? то есть когда батник доходит о строчки "c:\base\project1.exe" то опять не проходит проверка на дату какя понимаю..

Автор: Song 08.05.04, 06:33
Цитата
AlkofF, 7.05.04, 23:49
Здесь явно бред где-то.. запуск батника дает бесконечный цикл (я не разбираюсь к сожалению в батниках)

Не даст.
Вот условие:

Цитата
AlkofF, 7.05.04, 23:49
IF Exist


Цитата
AlkofF, 7.05.04, 23:49
и что ж произойдет..ну создастся батник.. а как замена то пройдет..автоматически или батник руками заупскать ?

Запустится автоматом. Вот команда:

Цитата
Song, 7.05.04, 16:52
{ Запускаем скрипт }
WinExec('update.bat', SW_HIDE);


Добавлено в :
Цитата
AlkofF, 7.05.04, 23:49
Я никак не могу понять что надо подставлять на мето твоего пармстр(0)... c:/base/project1.exe я везде ставлю, но это не глотаеца... обноление же остаеца для меня загадкой... как все таки этотбатник запускаеца... ведь прога работает в этот момент

Ничего не надо ставить. Оставь ParamStr(0) - это путь до твоего exeшника!
Проверка на обновление происхоидит при запуске программы.

Цитата
AlkofF, 7.05.04, 23:49
Там третья строчка была еще одна но я ее закоментил потому что она давала цикл как раз.. но мучает вопрос.. почемуже 2 раза выскакивает сообщение о новой версии? то есть когда батник доходит о строчки "c:\base\project1.exe" то опять не проходит проверка на дату какя понимаю..

А это как раз из-за того, что ты удалил третью строчку. Она удаляла файл и крутилась до тех пор пока не удалит. Поэтому у тебя:
1) исходный файл не удаляется
2) второй не копируется. (По идее он должен спросить Y/N но т.к. это батник не знаю что он у тебя там делает)
3) запускается старый необновлённый exe, который опять говорит, что ест новая версия.

вот прикол: Уже человеку и дашь полностью работоспособный модуль, и он не может применить его к себе для проекта.

Автор: AlkofF 08.05.04, 11:42
Лан те... ну не получается у меня... ща сяду и все разберу...

Усе... вроде пашет... сеннкс... я просто видимо вчера оч устал... и не мог толком все понять... плюсик Song'у!

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