На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Апдейт программы , возможность реализации автоматического обновления
      Ребятки..а никто случаем не сталкивался с такой задачкой, как релизовать автоматическую проверку на появление более новой версии программы в какой-нить папочке и автоматического же обновления одного экзешника на другой? ну то есть пусть в процессах сидит программулька которая смотрит какой экзешник проги на локальном компе и какая версия в сети сть. Просто приходится сейчас делать так, что народ работает на сыром клиенте. А я параллельно вношу измения и правлю баги :) Если кто поможет, буду премного благодарен!
        При создании формы (запуске проги (1)) запускай др. прогу(2) которая будет просматривать каталог, который ты ей пропишешь на наличие более нового файла и после того как прога 2 нашла файл. Закрой програмно прогу 1 и скопируй из папки с заменой файл новой версии проги, после чего запусти прогу 1 , завершив ,после запуска проги1, прогу 2.

        И ишо тут: Стирание файла
        Сообщение отредактировано: dimastdk -
          ExpandedWrap disabled
             
            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}
            ....
            Спасибки... я взгляну сегодня вечерком... тока вот вопросы к те, Song... что за update.bat такой.. для чего он нужен? есть ли он или это автосоздаваемый временный файл... и что за ParamStr(0) c Main.basekat
              update.bat - файл с помощью, которого собственно программа обновляется.
              ParamStr(0) - путь к запущенной программе
              Main.Basekat - здесь у меня путь к файлам БД. В нём у меня каталог Update, в котором находится новый exeшник для обновления. Ты можешь конечно пути поменять.
                Чаго то не пашет.. в чем дело понять не могу... при запуске у меня появился батник с таким текстом:

                :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" то опять не проходит проверка на дату какя понимаю..
                  Цитата
                  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, который опять говорит, что ест новая версия.

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

                    Усе... вроде пашет... сеннкс... я просто видимо вчера оч устал... и не мог толком все понять... плюсик Song'у!
                    Сообщение отредактировано: AlkofF -
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


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