Александр Малыгин дата публикации 16-08-2004 11:58 Простой способ автоматического обновления "Используй то, что под рукою, и не ищи себе другое"
Филеас Фогг
Проблема автоматического обновления файлов приложения весьма актуальна,
когда программисту приходится поддерживать большое количество пользователей
его программы. При этом компьютеры этих пользователей могут быть расположены
как рядом с рабочим местом программиста, так и совершенно недоступны физически.
Предлагаемый способ не требует внесения специального кода в приложение.
Используются стандартные средства операционной системы.
Также он предполагает участие пользователя. Точнее, процедура обновления не
может выполниться, пока пользователь этого не позволит. В данном случае
лояльность к пользователю (дать ему возможность корректно закончить текущий
сеанс работы) — это более полезное качество, чем "тихое" обновление
"незаметно" для него.
- Замена любого количества файлов приложения на файлы из пакета обновления
- Складирование успешно обработанных пакетов в специальной директории
- Складирование пакетов, обработанных с ошибкой, в специальной директории
- Ведение журнала обновлений
- Запись в журнал фатальных runtime ошибок приложения
- Контроль версий файлов (файлы безусловно переписываются)
- Автоматический откат в случае неудачного обновления (хотя создаются условия для ручного отката)
- Немедленное обновление при работающем приложении
- Приложением управляет пользователь. Во всяком случае, он может его перезагрузить
- Приложение запускается из bat-файла, который прописан в ярлыке.
Если пользователь запускает непосредственно exe, то система обновления не работает.
- Директория приложения доступна оператору, рассылающему обновления, как
сетевой ресурс, либо по ftp. В крайнем случае пакет обновления посылается по электропочте
или передается физическим носителем информации, с инструкцией, куда скопировать файл.
В лучшем случае имеется доступ по терминальной сессии или через RemoteAdmin.
- Пакет обновления должен быть отлажен программистом. Надо быть уверенным,
что состав передаваемых файлов необходим и достаточен для успешного обновления
именно той версии программы, которая стоит у данного клиента.
- На клиентской машине должен быть установлен архиватор, который используется
системой обновления. Он должен работать в режиме командной строки
(достаточно утилиты разархивации).
- Оператор обновления (программист) архивирует необходимые файлы и помещает
собранный пакет в директорию UPDATE на клиентской машине, любым из
вышеописанных способов.
- Пользователю посылается извещение по электропочте или стандартным мессенджером
(net send) о том, что надо перегрузить программу.
- При очередном запуске система обновления обрабатывает все файлы в директории UPDATE,
пытаясь разархивировать их в текущую директорию программы.
- Запускается основной исполняемый модуль приложения.
В корневой директории приложения должно быть создано следующее дерево:
UPDATE — для пакетов текущего обновления
UPDATE\ARCH — для отработанных пакетов
UPDATE\BAD — для ошибочных пакетов
В корневой директории располагаются файлы autoupdate.bat и
processupdate.bat. Ярлык программы настраивается,
чтобы запуск происходил так:
autoupdate.bat program.exe
Содержимое файла autoupdate.bat:
@for %%a in (UPDATE\*.rar) do call processupdate.bat %%a
@if .%1==. exit
%1
@if ERRORLEVEL 1 echo %date% %time% Error execution %1 : %ERRORLEVEL% >>update.log
Содержимое файла processupdate.bat:
@if .%1==. exit
"C:\Program Files\WinRAR\unrar" x -y %1
@if ERRORLEVEL 1 goto bad
move %1 UPDATE\ARCH\
@echo %date% %time% Success update. File %1 >>update.log
@exit
:bad
@echo %date% %time% Unpack error %ERRRORLEVEL%. File %1 >>update.log
move %1 UPDATE\BAD\
При необходимости следует поправить путь к утилите для разархивации и расширение файлов пакетов.
[Установка ПО] [Удаленная установка]
Обсуждение материала [ 11-03-2010 15:48 ] 30 сообщений |