Программа для обновления версий на клиентских машинах


История:

После появления 10-го пользователя моей программы стало проблематично бегать по рабочим местам и обновлять версии, тем более что обновления часто включали багофиксы и функционирование в системе старых версий было очень нежелательно. В результате возникла идея сделать каталог общего доступа (мне - на запись, остальным - на чтение), чтоб юзеры сами скачивали обновления, причем незаметно для себя. В результате родилась эта программа.

На рабочий стол кидается ярлык, который вместо основной программы указывает на LiveUpd, поэтому при запуске юзером программы сначала происходит проверка и обновление файлов, а затем - собственно запуск.

Метод:

Программа сравнивает даты указанных файлов с файлами в текущем каталоге и обновляет текущий каталог по необходимости.

После обновления запускается программа из run=...,

Параметр BaseDir= позволяет задать общий каталог-источник, если каталог присутствует в имени файла - то используется он.

Русские имена файлов должны быть указаны в кодировке WIN1251.

Программа также обновляет саму себя: для этого создается bat-файл, который запускается после завершения программы, копирует LiveUpd.exe и самоуничтожается.

Успехов !!! (скачать)

(c) Konstantin Beliaev, 2001


Отзывы на статью

1) А я делаю так:
xcopy \\192.168.0.150\ntfs\ALLSPRUT\KLIENT\ c:\allsprut /D /F /Y /S

2) Аналогично. Только я использую *.bat, в котором кроме копирования еще
есть строчка типа:
for %%f in (*.dll,*.ocx,*.tlb) do tregsvr %%f
- для регистрации ActiveX библиотек. Кстати, сам bat-файл тоже лежит на
сервере и соответственно нет проблемы с его обновлением.
Написано все и отлажено за 5-10 минут (включая изучение документации по
команде for). И где здесь нужна программа?

Мой комментарий: все это справедливо, единственное дополнение - должен быть инсталлятор, который прописывал бы эти скрипты в меню и присваивал им красивые иконки. В идеале хотелось бы чтоб любая программа из пакета проверяла наличие новых версий, при обнаружении - запускала скрипт обновления, а сама завершалась, скрипт копировал новые файлы и снова запускал исходную программу.


Дополнение от 2009 года

Позднее родилось еще два метода автоматического обновления.

1) создаем описанный выше bat-файл, в котором перечислены все необходимые для копирования файлы, а в самом конце - запускается сама программа, например:

--- start_me.bat ---
@echo off
xcopy \\server\upgrade\SLM2\SLM2_3.exe . /Z /Y /V /D /Q
xcopy \\server\upgrade\SLM2\Help\*.* .\Help\*.* /S /Z /Y /V /D /Q
xcopy \\server\upgrade\SLM2\*.dll . /Z /Y /V /D /Q
start SLM2_3.exe
---

Данный файл кладем в тот же каталог обновления, что и саму программу (в нашем случае \\server\upgrade\SLM2).
Далее, в том же самом каталоге создаем ярлык, у которого в качестве запускаемого файла указываем

\\server\upgrade\SLM2\start_me.bat

а в качестве рабочего каталога - каталог на компьютере пользователя, например, C:\WORK_DIR.
Для красоты, нужно еще сменить иконку у ярлыка - вместо умолчательного белого квадратика с шестеренкой установить иконку из запускаемого файла, в нашем случае из SLM2_3.exe

Теперь установка программы на компьютер пользователя заключается в создании каталога C:\WORK_DIR и копировании созданного ранее ярлыка на рабочий стол. Теперь при клике пользователем по ярлыку, сначала скопируются все обновленные файлы, а потом произойдет запуск программы, абсолютно прозрачно для пользователя.

2) Покольку у меня вся работа идет с базой данных, то родилась идея и обновления программ хранить в базе данных.

В двух словах, идея заключается в следующем. В базе данных создаются таблицы, позволяющие повторить структуру рабочего каталога, и загрузить все необходимые файлы в BLOB поля. В качестве украшения, к каждому файлу сделано текстовописание и файлы сгруппированы в несколько групп.

Пришлось таки написать программу :-) которая показывает файлы из базы аналогично проводнику Windows. Теперь пользователь запускает программы не с диска, а из программной оболочки. При запуске конкретной программы, сначала на компьютер пользователя копируются все все обновленные файлы, принадлежащие группе запускаемой программы, а только потом происходит запуск.

Плюсы этого метода в том, что обновления можно передавать даже через интернет, что невозможно в предыдущих вариантах, когда требуется каталог с общим доступом, обновления программ можно проводить одновременно с обновлением структур в базе данных. В базах разных версий лежат именно те программы, которые предназначены для работы с данной версией БД.

Ну, минусы, думаю, каждый найдет сам :-))

(to be continued...)

Comments