Автоматическое обновление клиентского ПО
Модератор: kdv
Автоматическое обновление клиентского ПО
Здравствуйте эксперты!
Сейчас остро стала проблема обеспечения автоматического обновления клиентского ПО, поскольку довольно часто в него вносятся изменения. Идея следующая:
1. Клиентское ПО при старте проверяет на сервере (в расшареной папке) наличие новых и/или измененных файлов.
2. Запускает отдельное приложение, а свою работу завершает.
3. Запущенное приложение обновляет файлы, завершает свою работу и запускает клиентское ПО.
Как это реализовано у Вас?
Существуют ли готовые решения (модули, компоненты)?
ОС: Windows 98, XP
Среда разработки: Delphi 5
Заранее спасибо!
Сейчас остро стала проблема обеспечения автоматического обновления клиентского ПО, поскольку довольно часто в него вносятся изменения. Идея следующая:
1. Клиентское ПО при старте проверяет на сервере (в расшареной папке) наличие новых и/или измененных файлов.
2. Запускает отдельное приложение, а свою работу завершает.
3. Запущенное приложение обновляет файлы, завершает свою работу и запускает клиентское ПО.
Как это реализовано у Вас?
Существуют ли готовые решения (модули, компоненты)?
ОС: Windows 98, XP
Среда разработки: Delphi 5
Заранее спасибо!
Я вобщем нашел там некоторые вещи, но хотел посоветоваться с более опытными людьми. И большинство из них проприетарныеAttid писал(а):готовые решения поищи на торри.нет
А как батником проверять произошли изменения в файле или нет? Или Вы имеете ввиду каждый раз при старте копировать файлы?WildSery писал(а):Обычный бат-файл для старта клиентского приложения.
У меня клиент для Firebird, поэтому хотел посоветоваться с людьми, которые создают приложения именно для этой базы и в локальной сети.WildSery писал(а):А вообще, при чём тут IB/FB?
Нуу... у некоторых извращенцев слегка при чём У меня запускается не прога, а запускатор, который лезет в базу, смотрит, какие из 20 приложений данному усеру разрешено-положено прикладывать, сравнивает дату оных приложений на шаре с датой у усера, копирует, и, в зависимости от проставленных им галочек в списке, сразу запускает те, которые он хочет. А супротив особо умных, при внесении принципиальных изменений в приложения, меняется минимально разрешённая версия приложения в базе и оно (приложение) сравнивает свою вшитую версию с версией в базе и, при несовпадении, шлёт в сад.WildSery писал(а): А вообще, при чём тут IB/FB?
В простейшем случае, который скорее всего тебя удовлетворит - XCOPY умеет копировать только изменившиеся файлы. Для более сложных случаев нужен более интеллектуальный копировщик, например ROBOCOPY (он уже не входит в дистрибутив винды).Tokolist писал(а):А как батником проверять произошли изменения в файле или нет? Или Вы имеете ввиду каждый раз при старте копировать файлы?
Не удержался таки (Ни в коем случае не упрёк )Merlin писал(а):Нуу...
У меня даже была идея хранить собственно все модули кроме запускатора внутри базы (в блобах), и выгружать при старте, а потом за собой прибирать. Даже (это уже из голого интереса) рассматривал вариант подключения библиотеки прямо из памяти (не создавая файла).
Но потом навалилась суровая действительность, к тому же какие-то недочёты нашлись (даже так сразу не помню, какие) и пока есть то, что есть.
Разделения на "можно запускать" / "нельзя запускать" встроенны в общую систему авторизации системы, не из неё библиотеки не работают. Сравнение версий выделенных модулей с "разрешёнными" уже написал, тестируется проверщик и логгер.
Да нее... Мне ж kdv давно разрешил. Тока не до грибов в общем и целом. Тут как в том анекдоте, когда ребёнок 10 лет молчал, а потом вдруг изрёк - а гусь то подгорел. На пионерские фантазии перестал реагировать, на хитровыеженные запросы из прынцыпа там, где надо писать ХП, на них же по причине дыры в консерватории, строить за кого-то консерваторию тоже завязал - ну и получается, что и говорить-то не о чем. Разумных вопросов с простыми ответами давно нигде нет, а заниматься эрундой или слишком много думать за других стало влом. Вот так и слезают с иглыWildSery писал(а):Не удержался таки (Ни в коем случае не упрёк )Merlin писал(а):Нуу...
2 Merlin, WildSery
Попрошу не оффтопить
Еще вопрос по батнику: Это у тебя так реализовано, или это твой совет мне?
Так вот, последняя под Оракл и являет собой досовское приложение. В ней каждая форма являет собой отдельный модуль, которые хранятся в базе и при старте приложения происходит обновление каждой формы в отдельности.
Но это вариант очень сложен в реализации и не соответствует моей зарплате
2 All
Я не прошу думать за меня, я прошу дать совет или рассказать как реализовано у вас.
Попрошу не оффтопить
Вот это хорошая идея. Только я как истинный параноик буду проверять МД5 контрольную сумуMerlin писал(а):А супротив особо умных, при внесении принципиальных изменений в приложения, меняется минимально разрешённая версия приложения в базе и оно (приложение) сравнивает свою вшитую версию с версией в базе и, при несовпадении, шлёт в сад.
Субъективный минус: А если нужно будет обновить запускатор?Merlin писал(а):У меня запускается не прога, а запускатор
меня удовлетворит ROBOCOPY ибоWildSery писал(а):В простейшем случае, который скорее всего тебя удовлетворит - XCOPY умеет копировать только изменившиеся файлы. Для более сложных случаев нужен более интеллектуальный копировщик, например ROBOCOPY (он уже не входит в дистрибутив винды).
Снова таки субъективный минус - невозможность автоматического обновления батника./MIR activates mirror mode, deleting any files in the destination that aren't present in the source
Еще вопрос по батнику: Это у тебя так реализовано, или это твой совет мне?
Расскажу даже больше. Могу даже дать пример где схоже реализовано. У меня две базы. Одна локальная, ту которую администрирую я и глобальная, которая к моей не имеет никакого отношения (ей занимаются другие разработчики).WildSery писал(а):У меня даже была идея хранить собственно все модули кроме запускатора внутри базы...
Так вот, последняя под Оракл и являет собой досовское приложение. В ней каждая форма являет собой отдельный модуль, которые хранятся в базе и при старте приложения происходит обновление каждой формы в отдельности.
Но это вариант очень сложен в реализации и не соответствует моей зарплате
2 All
Я не прошу думать за меня, я прошу дать совет или рассказать как реализовано у вас.
Не знаю будет ли полезным:
У меня обновление реализовано следующим образом
- в расшаренной папке на сервере хранятся файлы программы
- на каждом клиенте простой не изменяемы батник, в котором стандартной командой copy все файлы копируются к клиенту на машину
- далее команда start для запука приложения БД
- сама запустившаяся программа проверяет свою вшитую версию с версией БД
- если версия БД устаревшая - программа делает резервную копию БД и пытается ее обновить (естественной эта возможность доступна не всем пользователям и перед тем и другим программа спросит)
- обновление происходит с помощью накатывания на БД специального скрипта (кот. можно получить сравнивая БД например в IBExpert), перед обновлением проверяется что нет других подключенных пользователей
- Этот файл скрипта кстати лежит в папке с программой и в первом пункте также скопируется к клиенту самой последней версии с расшаренной папки сервера
- Если же пользователь запустит программу и при каких то обстоятельствах - новые файлы с сревера не скопируются, а БД кем то уже была обновлена - сообщение о несоместимости и необходимости обновления файлов программы
Кстати этот же способ использую и для программ кот. распостраняются с помощью дистрибутива, а не в локальной сети - просто установщик при установки новой версии не перезаписывает файл БД, а только файлы программы, скрипта и т.д. И при следующем запуске программа сама пытается себя обновить.
Для версий программы и БД использую ДАТЫ чтобы не запутаться самому и всегда можно примерно понять какая программа стоит у клиентов если они по телефону скажут например ... версия 01.01.2006
Наверное это достаточно стандартный подход...
Взял на вооружение у Гречишникова В.В.
У меня обновление реализовано следующим образом
- в расшаренной папке на сервере хранятся файлы программы
- на каждом клиенте простой не изменяемы батник, в котором стандартной командой copy все файлы копируются к клиенту на машину
- далее команда start для запука приложения БД
- сама запустившаяся программа проверяет свою вшитую версию с версией БД
- если версия БД устаревшая - программа делает резервную копию БД и пытается ее обновить (естественной эта возможность доступна не всем пользователям и перед тем и другим программа спросит)
- обновление происходит с помощью накатывания на БД специального скрипта (кот. можно получить сравнивая БД например в IBExpert), перед обновлением проверяется что нет других подключенных пользователей
- Этот файл скрипта кстати лежит в папке с программой и в первом пункте также скопируется к клиенту самой последней версии с расшаренной папки сервера
- Если же пользователь запустит программу и при каких то обстоятельствах - новые файлы с сревера не скопируются, а БД кем то уже была обновлена - сообщение о несоместимости и необходимости обновления файлов программы
Кстати этот же способ использую и для программ кот. распостраняются с помощью дистрибутива, а не в локальной сети - просто установщик при установки новой версии не перезаписывает файл БД, а только файлы программы, скрипта и т.д. И при следующем запуске программа сама пытается себя обновить.
Для версий программы и БД использую ДАТЫ чтобы не запутаться самому и всегда можно примерно понять какая программа стоит у клиентов если они по телефону скажут например ... версия 01.01.2006
Наверное это достаточно стандартный подход...
Взял на вооружение у Гречишникова В.В.
Как и в случае с запускатором, его обновление не требуется. Он лежит собственно не у юзера, а непосредственно с сервера запускается по ярлыку. По крайней мере у меня.Tokolist писал(а):Снова таки субъективный минус - невозможность автоматического обновления батника.
Да, я его использую.Tokolist писал(а):Еще вопрос по батнику: Это у тебя так реализовано, или это твой совет мне?
У меня попроще с секурностью, все модули без основного блока смысла не имеют и прикрутить их куда-то ещё крайне трудоёмко, и многое нужно знать про них, а контроль версий проводится основным приложением.
Кроме того, у меня несколько разных конфигураций, в зависимости от параметра в ярлыке копируется нужная.