Автоматическое обновление клиентского ПО

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Tokolist

Автоматическое обновление клиентского ПО

Сообщение Tokolist » 08 апр 2007, 18:25

Здравствуйте эксперты!

Сейчас остро стала проблема обеспечения автоматического обновления клиентского ПО, поскольку довольно часто в него вносятся изменения. Идея следующая:

1. Клиентское ПО при старте проверяет на сервере (в расшареной папке) наличие новых и/или измененных файлов.
2. Запускает отдельное приложение, а свою работу завершает.
3. Запущенное приложение обновляет файлы, завершает свою работу и запускает клиентское ПО.

Как это реализовано у Вас?
Существуют ли готовые решения (модули, компоненты)?

ОС: Windows 98, XP
Среда разработки: Delphi 5

Заранее спасибо!

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 09 апр 2007, 10:37

вот именно так все и было реализовано =)

отдельное приложение было маленьким и консольным и хранилось в ресурсах основного.

готовые решения поищи на торри.нет

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 09 апр 2007, 10:55

Обычный бат-файл для старта клиентского приложения.
А вообще, при чём тут IB/FB?

Tokolist

Сообщение Tokolist » 09 апр 2007, 20:56

Attid писал(а):готовые решения поищи на торри.нет
Я вобщем нашел там некоторые вещи, но хотел посоветоваться с более опытными людьми. И большинство из них проприетарные :(
WildSery писал(а):Обычный бат-файл для старта клиентского приложения.
А как батником проверять произошли изменения в файле или нет? Или Вы имеете ввиду каждый раз при старте копировать файлы?
WildSery писал(а):А вообще, при чём тут IB/FB?
У меня клиент для Firebird, поэтому хотел посоветоваться с людьми, которые создают приложения именно для этой базы и в локальной сети.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 09 апр 2007, 21:28

WildSery писал(а): А вообще, при чём тут IB/FB?
Нуу... у некоторых извращенцев слегка при чём :oops: У меня запускается не прога, а запускатор, который лезет в базу, смотрит, какие из 20 приложений данному усеру разрешено-положено прикладывать, сравнивает дату оных приложений на шаре с датой у усера, копирует, и, в зависимости от проставленных им галочек в списке, сразу запускает те, которые он хочет. А супротив особо умных, при внесении принципиальных изменений в приложения, меняется минимально разрешённая версия приложения в базе и оно (приложение) сравнивает свою вшитую версию с версией в базе и, при несовпадении, шлёт в сад.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 10 апр 2007, 00:19

Tokolist писал(а):А как батником проверять произошли изменения в файле или нет? Или Вы имеете ввиду каждый раз при старте копировать файлы?
В простейшем случае, который скорее всего тебя удовлетворит - XCOPY умеет копировать только изменившиеся файлы. Для более сложных случаев нужен более интеллектуальный копировщик, например ROBOCOPY (он уже не входит в дистрибутив винды).
Merlin писал(а):Нуу...
Не удержался таки :) (Ни в коем случае не упрёк :wink:)
У меня даже была идея хранить собственно все модули кроме запускатора внутри базы (в блобах), и выгружать при старте, а потом за собой прибирать. Даже (это уже из голого интереса) рассматривал вариант подключения библиотеки прямо из памяти (не создавая файла).
Но потом навалилась суровая действительность, к тому же какие-то недочёты нашлись (даже так сразу не помню, какие) и пока есть то, что есть.
Разделения на "можно запускать" / "нельзя запускать" встроенны в общую систему авторизации системы, не из неё библиотеки не работают. Сравнение версий выделенных модулей с "разрешёнными" уже написал, тестируется проверщик и логгер.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 10 апр 2007, 22:07

WildSery писал(а):
Merlin писал(а):Нуу...
Не удержался таки :) (Ни в коем случае не упрёк :wink:)
Да нее... Мне ж kdv давно разрешил. Тока не до грибов в общем и целом. Тут как в том анекдоте, когда ребёнок 10 лет молчал, а потом вдруг изрёк - а гусь то подгорел. На пионерские фантазии перестал реагировать, на хитровыеженные запросы из прынцыпа там, где надо писать ХП, на них же по причине дыры в консерватории, строить за кого-то консерваторию тоже завязал - ну и получается, что и говорить-то не о чем. Разумных вопросов с простыми ответами давно нигде нет, а заниматься эрундой или слишком много думать за других стало влом. Вот так и слезают с иглы :wink:

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 11 апр 2007, 11:09

Про "хитровыезженные" запросы - я это как разминку для мозга использую. Над одной проблемой сидишь, голова уже опухла, а тут отвлёкся, размял мозг - и дальше.

Tokolist

Сообщение Tokolist » 11 апр 2007, 20:46

2 Merlin, WildSery
Попрошу не оффтопить :)
Merlin писал(а):А супротив особо умных, при внесении принципиальных изменений в приложения, меняется минимально разрешённая версия приложения в базе и оно (приложение) сравнивает свою вшитую версию с версией в базе и, при несовпадении, шлёт в сад.
Вот это хорошая идея. Только я как истинный параноик буду проверять МД5 контрольную суму :)
Merlin писал(а):У меня запускается не прога, а запускатор
Субъективный минус: А если нужно будет обновить запускатор? :)
WildSery писал(а):В простейшем случае, который скорее всего тебя удовлетворит - XCOPY умеет копировать только изменившиеся файлы. Для более сложных случаев нужен более интеллектуальный копировщик, например ROBOCOPY (он уже не входит в дистрибутив винды).
меня удовлетворит ROBOCOPY ибо
/MIR activates mirror mode, deleting any files in the destination that aren't present in the source
Снова таки субъективный минус - невозможность автоматического обновления батника.

Еще вопрос по батнику: Это у тебя так реализовано, или это твой совет мне?
WildSery писал(а):У меня даже была идея хранить собственно все модули кроме запускатора внутри базы...
Расскажу даже больше. Могу даже дать пример где схоже реализовано. У меня две базы. Одна локальная, ту которую администрирую я и глобальная, которая к моей не имеет никакого отношения (ей занимаются другие разработчики).
Так вот, последняя под Оракл и являет собой досовское приложение. В ней каждая форма являет собой отдельный модуль, которые хранятся в базе и при старте приложения происходит обновление каждой формы в отдельности.
Но это вариант очень сложен в реализации и не соответствует моей зарплате :)


2 All
Я не прошу думать за меня, я прошу дать совет или рассказать как реализовано у вас.

break
Сообщения: 58
Зарегистрирован: 12 май 2005, 11:03

Сообщение break » 12 апр 2007, 10:21

Не знаю будет ли полезным:

У меня обновление реализовано следующим образом
- в расшаренной папке на сервере хранятся файлы программы
- на каждом клиенте простой не изменяемы батник, в котором стандартной командой copy все файлы копируются к клиенту на машину
- далее команда start для запука приложения БД
- сама запустившаяся программа проверяет свою вшитую версию с версией БД
- если версия БД устаревшая - программа делает резервную копию БД и пытается ее обновить (естественной эта возможность доступна не всем пользователям и перед тем и другим программа спросит)
- обновление происходит с помощью накатывания на БД специального скрипта (кот. можно получить сравнивая БД например в IBExpert), перед обновлением проверяется что нет других подключенных пользователей
- Этот файл скрипта кстати лежит в папке с программой и в первом пункте также скопируется к клиенту самой последней версии с расшаренной папки сервера
- Если же пользователь запустит программу и при каких то обстоятельствах - новые файлы с сревера не скопируются, а БД кем то уже была обновлена - сообщение о несоместимости и необходимости обновления файлов программы

Кстати этот же способ использую и для программ кот. распостраняются с помощью дистрибутива, а не в локальной сети - просто установщик при установки новой версии не перезаписывает файл БД, а только файлы программы, скрипта и т.д. И при следующем запуске программа сама пытается себя обновить.

Для версий программы и БД использую ДАТЫ чтобы не запутаться самому и всегда можно примерно понять какая программа стоит у клиентов если они по телефону скажут например ... версия 01.01.2006

Наверное это достаточно стандартный подход...
Взял на вооружение у Гречишникова В.В.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 12 апр 2007, 11:35

Tokolist писал(а):Снова таки субъективный минус - невозможность автоматического обновления батника.
Как и в случае с запускатором, его обновление не требуется. Он лежит собственно не у юзера, а непосредственно с сервера запускается по ярлыку. По крайней мере у меня.
Tokolist писал(а):Еще вопрос по батнику: Это у тебя так реализовано, или это твой совет мне?
Да, я его использую.
У меня попроще с секурностью, все модули без основного блока смысла не имеют и прикрутить их куда-то ещё крайне трудоёмко, и многое нужно знать про них, а контроль версий проводится основным приложением.
Кроме того, у меня несколько разных конфигураций, в зависимости от параметра в ярлыке копируется нужная.

Ответить