Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.168.172] |
|
Сообщ.
#1
,
|
|
|
Ребятки..а никто случаем не сталкивался с такой задачкой, как релизовать автоматическую проверку на появление более новой версии программы в какой-нить папочке и автоматического же обновления одного экзешника на другой? ну то есть пусть в процессах сидит программулька которая смотрит какой экзешник проги на локальном компе и какая версия в сети сть. Просто приходится сейчас делать так, что народ работает на сыром клиенте. А я параллельно вношу измения и правлю баги Если кто поможет, буду премного благодарен!
|
Сообщ.
#2
,
|
|
|
При создании формы (запуске проги (1)) запускай др. прогу(2) которая будет просматривать каталог, который ты ей пропишешь на наличие более нового файла и после того как прога 2 нашла файл. Закрой програмно прогу 1 и скопируй из папки с заменой файл новой версии проги, после чего запусти прогу 1 , завершив ,после запуска проги1, прогу 2.
И ишо тут: Стирание файла |
Сообщ.
#3
,
|
|
|
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} .... |
Сообщ.
#4
,
|
|
|
Спасибки... я взгляну сегодня вечерком... тока вот вопросы к те, Song... что за update.bat такой.. для чего он нужен? есть ли он или это автосоздаваемый временный файл... и что за ParamStr(0) c Main.basekat
|
Сообщ.
#5
,
|
|
|
update.bat - файл с помощью, которого собственно программа обновляется.
ParamStr(0) - путь к запущенной программе Main.Basekat - здесь у меня путь к файлам БД. В нём у меня каталог Update, в котором находится новый exeшник для обновления. Ты можешь конечно пути поменять. |
Сообщ.
#6
,
|
|
|
Чаго то не пашет.. в чем дело понять не могу... при запуске у меня появился батник с таким текстом:
: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 Здесь явно бред где-то.. запуск батника дает бесконечный цикл (я не разбираюсь к сожалению в батниках) и вообьще не оч представляю весь поцесс... например есть версия более новая.. и что ж произойдет..ну создастся батник.. а как замена то пройдет..автоматически или батник руками заупскать ? Добавлено в : я вроде понял откудабесконечный цикл но я сделал все как в листинге что ты мне дал, 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" то опять не проходит проверка на дату какя понимаю.. |
Сообщ.
#7
,
|
|
|
Цитата 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, который опять говорит, что ест новая версия. вот прикол: Уже человеку и дашь полностью работоспособный модуль, и он не может применить его к себе для проекта. |
Сообщ.
#8
,
|
|
|
Лан те... ну не получается у меня... ща сяду и все разберу...
Усе... вроде пашет... сеннкс... я просто видимо вчера оч устал... и не мог толком все понять... плюсик Song'у! |