FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9233
Вход
Автоматическое обновление версий

Даже если у вас всего два пользователя, бывает очень утомительно каждый раз копировать им на рабочие станции обновления своей программы. Что же говорить, если пользователей несколько десятков, и расположены они в разных концах здания...


 
Прислал: Игорь Ильин   Категория: Распространение программ


Автоматическое обновление версий

Скопируйте файлы ChkNew.exe и ChkNew.ini в директорию со своей программой, сделайте необходимые настройки в ini-файле, и запустите.

Программа скомпилирована в VFP8 без SP1. Она вполне работоспособна для VFP7, но ее придется перекомпилировать.
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.94) Вложение [12.11]kb
Дополнения пользователей
Автоматическое обновление версий
[+][?]
Александр Яковлев
25.11.03 13:20:23

По поводу функции LastModified - есть же стандартная FDate()
Bykov V. Konstantin
25.11.03 14:28:23

Подобный вариант делал и я. Вот сделать бы так, чтобы updates устанавливать в процессе выполнения
самой программы, а не отдельно. Однако у нас ведь как получается - один EXE-шник, соответственно
перезаписать его во время выполнения не получится. Можно конечно рубить процесс и запускать потом
средствами API. В общем подумать надо.

А по сути - хорошо написано.
Igor Ilyin
25.11.03 23:00:16

2 Александр Яковлев

Спасибо, исправил.

Вредно знать FPD ;). Там есть только одна функция - LUpdate(), и относится она к только к открытым
таблицам. Вот я по старой памяти и сделал.
Igor Ilyin
25.11.03 23:01:27

2 Bykov V.Konstantin

Спасибо за теплые слова :)))

А в какой момент должны проверяться обновления, если программа уже запущена? По команде
пользователя? Тогда ничего сложного. В пункте меню "Проверка обновлений" пишешь:

Run /N ChkNew.exe
Quit

Программа запустит Version Checker, и завершится. Version Checker проверит обновления, и запустит
программу :). Только нужно будет в ChkNew поставить небольшую задержку, чтобы основная программа
успела выгрузиться из памяти.
Фирсов Андрей
26.11.03 20:07:59

В свое время к конфе FPD было на мой взгляд очень хорошее
решение обновления новых версий
Смысл такой. Конечное приложение состоит из 2х файлов EXE и APP.
APP - собственно сама прога
EXE - только одна функция которая умеет запускать APP, проверять на новую версию и при
необходимости тащить новый APP из сети
--------------------------
В EXE
IF новая версия
     COPY \\server\c\myprog.APP TO c:\myprog.APP
     DO myprog.APP
     ELSE
          DO myprog.APP
ENDIF
---------------------------
Проверка на новую версию по желанию


Bykov V. Konstantin
27.11.03 15:33:34

2 Фирсов Андрей >

Это конечно хорошо, но ведь (например я) не хочу бесплатно на право и налево свой код раздавать
;). ИМХО EXE-шник и только он.

2 CREATOR (Igor Ilyin)>

Я делал таймер, который и проверял наличие Updat-ов с определенным интервалом.
Фирсов Андрей
27.11.03 16:18:10

А с EXE-шником разьве ты код не раздашь? Его Refox на ура открывает. 
Igor Ilyin
28.11.03 20:37:20

2 Фирсов Андрей

1) App требует установки Фокса, а не только runtime-библиотек.
2) У app нет понятия "версия".

P.S. Я тут "под шумок" программку чуть подправил :) Теперь она не выдает сообщение об ошибке, если
сервер недоступен.
Александр Яковлев
02.12.03 13:33:33

APP требует не более, чем EXE. Само по себе EXE - это APP, дополненное вызовом рантайма.

А понятие "версия" несколько относительно. Может возникнуть ситуация, когда нужно заменить (срочно
заменить!) программу на более старую версию, скажем, если вкралась досадная ошибка, при этом
где-нибудь имеется старая "проверенная" версия, а пересобирать EXE с новой версией нет возможности
или времени.
Кстати, как в этом случае поступит Ваша программа? :-)
Igor Ilyin
02.12.03 23:10:57

Цитата из HELP. Статья называется Building an Application File from the Project

Users can run an .app file if they already have a copy of Visual FoxPro. Alternatively, you can
create an .exe file. The .exe file works in conjunction with two Visual FoxPro dynamic link
libraries (Vfp8r.dll and Vfp8renu.dll) that you ship with your application to provide a complete
run-time environment for Visual FoxPro.

Владимир Максимов
08.12.03 11:52:13

Не мог пробится раньше. Не работала регистрация.

1. В FoxPro есть родная функция AGetFileVersion(), которая позволяет читать версию файла. Нет
необходимости в DLL

2. Мне непонятно, чем не устраивает стандартная функция ADIR() с последующим сравнением размера
файла и времени последней модификации? Результат тот же, но адаптировать в рекурсию (сравнение
директорий) значительно проще. И нет привязки именно к номеру версии (которая есть далеко не у
всех файлов)

3. Вызывает сомнение необходимость запуска EXE именно через RUN. Все-равно ведь речь идет о
запуске среды FoxPro. Зачем ее второй раз запускать? Хотя, этот вопрос не столь однозначный.
Igor Ilyin
08.12.03 21:26:33

1. Именно AGetFileVersion() в данной программе и используется. При чем здесь dll?

2. В некоторых сетях некорректно отображается время создания/модификации файлов на сервере.
Неоднократно видел, когда судя по Last Modified, кто-то упорно трудился в офисе в 4 утра ;).
Поэтому у программки есть настройка в ini - способ сравнения версий. По дате, по версии, либо
копировать безусловно.

3. Если запустить через DO, в вызванную программу будут переданы настройки типа Set Safety и т.д.
Все, что было написано в config.fpw вызываемой программки, НЕ ОТРАБОТАЕТ.
И, наконец, ChkNew.exe останется в стеке. У меня был в меню пункт About. Там выводась версия,
CopyRight и прочая ерунда :) Если запускать через DO, то отображалась версия ChkNew, а не той
программы, в которой работал пользователь :)))
Владимир Максимов
09.12.03 11:35:38

1. Да, невнимательно посмотрел. Перепутал с библиотекой для чтния INI. Я просто передаю 2
параметра: что копировать, куда копировать. Без INI-файла.

2. Лично я для той же задачи использую объект Scripting.FileSystemObject. При этом сравнивается 3
значения: Имя файла, его размер в байтах и дата последней модификации. Если есть отличие в одном
из этих параметров - копирую.

Реальное время создания/модификации роли не играет. Пусть пользователь хоть круглосуточно
работает. Меня ведь интересует равно/не равно. А что именно - не принципиально. После первого же
копирования все встанет на свои места.

Тут вопрос в том, что я не вижу смысла писать диспетчер для копирования одного единственного
файла. Лично у меня, рабочие файлы проекта - это набор EXE, APP, CHM и
Владимир Максимов
09.12.03 11:39:01

Половину почему-то обрезало :(
...
Тут вопрос в том, что я не вижу смысла писать диспетчер для копирования одного единственного
файла. Лично у меня, рабочие файлы проекта - это набор EXE, APP, CHM и еще много чего, да еще
вложенные папки. Опираться на номер версии - бессмыслено.

3. Единственная настройка файла CONFIG.FPW которую нельзя сделать непосредственно в программе -
это CODEPAGE=... Все остальное вполне можно переложить на саму программу. Если это принципиально,
то почему не сделать все нужные настройки в CONFIG.FPW для твоей программы-диспетчера?

А не вернуть систему в то состояние, в котором она была при запуске программы (SET SAFETY и т.п.)
- это плохой тон программирования. Напрограммировал - убери за собой :)

По поводу About - это решается прогон%E
Владимир Максимов
09.12.03 11:41:49

Да что ж ее глючит-то !!!

По поводу About - это решается прогоном в цикле по PROGRAM() на предмет поиска первого файла с
расширением EXE примерно так:

* Определяю номер версии программы:
LOCAL laVersion(1), lnI, lcVersion
lcVersion=''
FOR lnI=PROGRAM(-1) TO 1 STEP -1
	IF JUSTEXT(SYS(16,m.lnI))="EXE" AND AGetFileVersion(laVersion,JustFName(SYS(16,m.lnI)))>0
		lcVersion='Версия № '+laVersion[11]
		EXIT
	ENDIF
ENDFOR
?m.lcVersion

Т.е. все проблемы запуска через диспетчер по DO вполне решаемые. Хотя согласен, вопрос
неоднозначный. По большому счету - дело вкуса и личных предпочтений.
Igor Ilyin
27.12.03 23:32:44

2 Владимир Максимов

То, что "проблемы вполне решаемы", это понятно :) С другой стороны, зачем проблемы решать, если
можно их не создавать?
Я сделал программку общего пользования. Т.е. любому человеку достаточно скопировать два файлика в
директорию со своей программой, настроить ini и запустить. Ничего переделывать не придется при
любом раскладе.

А по поводу копирования нескольких файлов в разные директории - надеюсь, у меня появится немного
свободного времени, выложу для общего пользования и такой вариант :)))
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика