Сообщений 10    Оценка 15 [+0/-2]         Оценить  
Система Orphus

Система «LiteUpdate»

Менеджер обновлений

Автор: Кузьмин Александр
www.gordago.ru

Источник: RSDN Magazine #4-2007
Опубликовано: 15.03.2008
Исправлено: 10.12.2016
Версия текста: 1.1
Введение
Технология обновления приложения
Технология сборки пакета обновления
От слов к делу
Настройка LiteUpdate
Использование LiteUpdate
Настройка сервера
Сборка пакета обновления
Управление проектом
Компиляция проекта
Ссылки
Лицензия
Заключение

В данной статье я постараюсь объяснить, что такое LiteUpdate и почему он будет полезен разработчикам .NET приложений.

Введение

Как часто вам приходилось экономить Интернет-трафик? Если вы даже не знаете, что это такое, то вам, безусловно, повезло. А что же делать тем, кто считает каждый мегабайт, скачанный из Интернета? Возможно, вы скажете, что такие времена уже давным-давно канули в небытие, - ничего подобного, возражу я вам. Взять хотя бы растущую популярность технологии GPRS, где стоимость Интернет-трафика доходит до 10 рублей за один мегабайт. А теперь представим ситуацию: вы разработчик популярного .NET-приложения и, как зачастую бывает, новые сборки вашей программы выходят с завидной регулярностью, ну, например, раз в месяц, а то и чаще. Пользователь, влюбленный в вашу программу и вынужденный экономить трафик, со скрежетом зубов будет запускать очередное обновление вашего приложения. Как же быть в данной ситуации? Можно ли хоть как-то помочь пользователю сэкономить свои кровные? Выход есть! Мы разработали бесплатную систему LiteUpdate с открытым исходным кодом. Эта система позволяет минимизировать трафик в процессе обновления. Снижение трафика достигнуто за счет следующего:

Архивация каждого файла позволила сэкономить трафик в два раза, а то и больше. А возможность просмотреть объем загружаемого обновления и информацию по новой версии дает пользователю возможность определиться, стоит ли ему загружать это обновление.

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

Теперь давайте рассмотрим более подробно, как это работает.

Технология обновления приложения

Когда пользовательское приложение запрашивает сервер о наличии новой версии, оно получает номер последнего пакета обновления. Если этот номер больше текущего номера последнего загруженного пакета обновления, то пользователю предоставляется возможность:

Формирование информации по обновлению:

  1. Загрузка файла lu_files.txt (список файлов приложения) и файла(ов) lu_userinfo_n.html (описания обновления, где n – номер пакета обновления).
  2. Создание списка и подсчет объема файлов пакета обновления.
  3. Формирование отчета.

Обновление производится в следующем порядке:

  1. Формирование информации по обновлению, если она еще не сформирована.
  2. Загрузка файлов пакета обновления.
  3. Распаковка файлов пакета обновления.
  4. Замена старых файлов приложения новыми.

Технология сборки пакета обновления

LiteUpdate Develop – это среда разработки, которая берет на себя всю работу по созданию пакета обновления вашего .NET-приложения.

В момент создания проекта в студии LiteUpdate Develop необходимо указать корневую папку приложения. Далее студия сформирует проект, в котором создаст основные разделы пакета обновления:

ПРИМЕЧАНИЕ

В файловую систему проекта по умолчанию заносятся все файлы и подкаталоги корневой папки приложения, а в разделе версии создается версия под номером один.

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

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

От слов к делу

Дабы не быть многословным, рассмотрим пример создания .NET-приложения с использованием системы LiteUpdate. В этом примере будут использованы следующие инструменты:

Итак, начнем.

В Microsoft Visual Studio 2005 создаем WindowsApplication проект. В References проекта добавляем библиотеки: менеджер обновлений Gordago.LiteUpdate.dll и Zip-архиватор ICSharpCore.SharpZipLib.dll. Эти библиотеки находятся в папке bin установленной студии LiteUpdate Develop (по умолчанию C:\Program Files\Gordago\LiteUpdate Develop\bin).

Библиотека ICSharpCore.SharpZipLib.dll необходима для работы менеджера обновления.

Далее создаем приложение с использованием менеджера обновления Gordago.LiteUpdate.dll. В данной статье я не буду рассматривать весь процесс создания демонстрационного приложения, а только рассмотрю ключевые моменты подключения и использование менеджера обновления. Полную же версию всех исходников, демонстрационного приложения, вы сможете просмотреть в папке sample студии LiteUpdate Develop (по умолчанию C:\Program Files\Gordago\LiteUpdate Develop\sample).

Настройка LiteUpdate

Перед использованием менеджера обновления в приложении, необходимо его настроить. Основные настройки – это идентификатор приложения, путь к скриптам LiteUpdate на сервере, прокси сервер и рабочие папки.

В приведенном ниже примере показано, как это можно сделать (пример взят из Program.cs):

        static
        class Program 
{
  ...
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  /* Настройка менеджера обновлений LiteUpdate 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* Путь к скриптам менеджера обновления */
  Gordago.LiteUpdate.Configure.UpdateUrl = "http://gordago.ru/liteupdate";

  /* Идентификатор приложения 
   * Необходим, чтобы идентифицировать приложение на стороне сервера.
   * В данном случае LiteUpdateSample, соответственно, путь к файлам
   * пакета обновления данного приложения должен быть 
   * http://gordago.ru/liteupdate/files/LiteUpdateSample
  Gordago.LiteUpdate.Configure.ProductId = "LiteUpdateSample";

  /* Корневая папка приложения */
  DirectoryInfo appdir = 
    new DirectoryInfo(new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName);
  Gordago.LiteUpdate.Configure.ApplicationDirectory = appdir;

  /* Рабочая папка менеджера обновлений. */
  DirectoryInfo updateDir = new DirectoryInfo(Path.Combine(appdir.FullName, "update"));
  Gordago.LiteUpdate.Configure.UpdateDirectory = updateDir;
  ...
}
ПРИМЕЧАНИЕ

Все настройки в данном примере выполнены на http://gordago.ru

Настройки прокси-сервера. Пример взят из ProxySettingsForm.cs:

        private
        void button1_Click(object sender, EventArgs e) 
{
  ProxySettings proxy = Gordago.LiteUpdate.Configure.Proxy;
  proxy.Enable = _chkEnableProxy.Checked;
  proxy.Server = _txtServer.Text;
  proxy.Port = Convert.ToInt32(_txtPort.Text);
  proxy.UserName = _txtUser.Text;
  proxy.UserPassword = _txtPassword.Text;
  this.Close();
}

Использование LiteUpdate

Чтобы использовать менеджер обновлений в приложении, необходимо создать экземпляр класса Gordago.LiteUpdate.UpdateManager и назначить обработчик для события StopCheckForUpdates. Для проверки обновления необходимо вызвать CheckForUpdates.

Пример из Form1.cs:

        private
        void button1_Click(object sender, EventArgs e) {
  ...
  /* Запуск проверки обновления */this._updateManager.CheckForUpdates();
}

Проверка обновления будет запущена в отдельном потоке. После того, как проверка будет завершена, будет вызвано событие StopCheckForUpdates. Если менеджер обновлений определит наличие новой версии на сервере, то флаг IsOldVersion будет равен true. Для запуска обновления необходимо создать экземпляр класса формы Gordago.LiteUpdate.UpdateForm, передав в параметрах экземпляр класса UpdateManager, и открыть эту форму в модальном режиме.

Пример из Form1.cs:

        private
        void _updateManager_StopCheckForUpdates(object sender, EventArgs e) {
...
  if (!_updateManager.IsOldVersion)
    return;

  Gordago.LiteUpdate.UpdateForm form = 
    new Gordago.LiteUpdate.UpdateForm(_updateManager);
  form.ShowDialog();
}

После выполнения данного кода будет открыто окно обновления:


Рисунок 1. Окно обновления приложения.

ПРИМЕЧАНИЕ

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

Настройка сервера

Скрипты сервера находятся в папке server студии LiteUpdate Develop (по умолчанию C:\Program Files\Gordago\LiteUpdate Develop\server).

Перед тем как загрузить файлы скриптов на сервер, необходимо настроить файл конфигурации includes/config.php:

        // ******** ПОЛНЫЙ ПУТЬ К ДИРЕКТОРИИ LITEUPDATE ******
        // На некоторых системах для нормальной работы менеджера обновлений 
        // требуется ввести полный путь к директории LiteUpdate. 
        // Не пишите завершающего слеша!
        // Unix:
        //   $config['Misc']['liteupdatepath'] = '/home/users/public_html/liteupdate';
        // Win32:
        //  $config['Misc']['liteupdatepath'] = 'c:\program files\apache 
      
ПРИМЕЧАНИЕ

В нашем случае скрипты находятся по адресу http://gordago.ru/liteupdate

Сборка пакета обновления

Итак, приложение создали, скрипты загрузили на сервер, осталось собрать пакет обновления. Для этого запускаем студию LiteUpdate Develop (Пуск -> Программы -> Gordago -> LiteUpdate Develop -> LiteUpdate Develop) и создаем проект (главное меню File -> New…):


Рисунок 2. Создание проекта.

В окне New Project в поле Name заносим наименование проекта, в Location – расположение проекта, в Application – расположение корневой папки обновляемого приложения, и жмем ОК.

В этот момент LiteUpdate Develop создаст проект и занесет в его файловую систему все файлы и вложенные папки из корневой папки обновляемого приложения.


Рисунок 3. Проект LiteUpdate Sample.

Проект создан. Перед тем, как собрать пакет обновления (компиляция проекта), рассмотрим основные возможности LiteUpdate Develop.

Управление проектом

Ниже описаны закладки, присутствующие в пользовательском интерфейсе LiteUpdate Develop.

File System

Файловая система проекта – это основное рабочее окно, в котором производится настройка всех файлов обновляемого приложения.


Рисунок 4. Файловая система проекта.

Левая панель управляет специальными папками приложения, правая панель управляет файлами приложения.

Чтобы добавить специальную папку, необходимо выбрать в левой панели File System on Target Machine и щелкнуть правой кнопкой мыши по ней:


Рисунок 5. Добавление специальной папки.

Чтобы создать папку или добавить файл в файловую систему проекта, необходимо в левой панели выбрать исходную папку и щелкнуть правой кнопкой мыши не ней:


Рисунок 6. Создание папки или добавление файла.

Project Explorer

Обозреватель проекта Project Explorer позволяет управлять компонентами проекта.


Рисунок 7. Обозреватель проекта

Обозреватель проекта включает:

Properties

Properties – это окно настроек проекта.

Двойным щелчком мыши по Properties открываем окно настроек проекта:


Рисунок 8. Настройка проекта.

В поле Root Directory выбираем корневую папку обновляемого приложения, а в поле Update Directory рабочую папку менеджера обновлений.

Пути, указанные в настройках проекта, в разделе Application, должны соответствовать настройкам менеджера обновления в разрабатываемом приложении, а именно Root Directory - Gordago.LiteUpdate.Configure.ApplicationDirectory, Update DirectoryGordago.LiteUpdate.Configure.UpdateDeirectory.

Files Modify

Модификация файлов в файловой системе версии пакета обновления.

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


Рисунок 10. Files Modify

User Info

Каждую версию пакета обновления можно снабдить информацией для пользователя в формате HTML.

Редактор User Info имеет два режима – Code и Design.

Режим Code служит для ввода Html-кода.


Рисунок 11. User Info – режим Code

Режим Design предназначен для предварительного просмотра введенной информации.


Рисунок 12. User Info – режим Design.

Компиляция проекта

Когда все необходимые компоненты проекта настроены, необходимо собрать пакет обновления. Для этого нужно в главном меню выбрать Project -> Build….

В этот момент студия LiteUpdate Develop проверит изменения в файловой системе проекта и произведет сборку пакета обновления в папку Output. Будут созданы также служебные файлы в рабочей папке менеджера обновления (lu_file.txt, lu_version.txt и файлы папки versions).

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

Теперь представим ситуацию: мы создали приложение, сформировали служебные файлы первой версии пакета обновления, включили их в дистрибутив и распространили приложение. Спустя некоторое время в приложение был добавлен файл MyTestFile.txt. Теперь необходимо, чтобы этот файл был добавлен посредством обновления программы в приложение клиента. Для этого запускаем студию LiteUpdate Develop, открываем проект приложения WindowsApplication1, добавляем в файловую систему MyTestFile.txt и компилируем проект. В этот момент студия обнаружит изменения в файловой системе и откроет окно создания версии пакета обновления:


Рисунок 13. Создание версии пакета обновления.

В этом окне будет предложено три варианта действий:

  1. Создать новую версию пакета обновления на основе изменений (кнопка Create New).
  2. Применить изменения к текущей версии (кнопка Apply Current).
  3. Отменить компиляцию проекта (кнопка Cancel).

Нажмем кнопку Create New, чтобы создать новую версию пакета обновления.


Рисунок 14. Компиляция проекта.

Если компиляции прошла без ошибок, то скомпилированные файлы будут находиться в папке Output проекта. Теперь, чтобы пользователи смогли получить новый пакет обновления, необходимо эти файлы загрузить на сервер.

В нашем случае путь к скриптам менеджера обновлений - http://gordago.ru/liteupdate/, соответственно, файлы из папки Output загружаем в http://gordago.ru/liteupdate/files/LiteUpdateSample/ (где LiteUpdateSample – это идентификатор обновляемого приложения).

ПРЕДУПРЕЖДЕНИЕ

Будьте внимательны, идентификатор приложения чувствителен к регистру.

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

Проверить работоспособность менеджера обновлений можно несколькими способами. Самый простой способ – сделать запрос из броузера:

http://gordago.com/liteupdate/update.php?go=check&p=LiteUpdateSample

Если все в порядке, то будет возвращен ответ:

ok
2

где 2 – номер текущего пакета обновления.

Для демонстрации работы менеджера обновления можно также запустить приложение WindowsApplication1.exe (по умолчанию C:\Program Files\Gordago\LiteUpdate Develop\sample\WindowsApplication1\bin\debug\WindowsApplication1.exe). Я специально собрал это демонстрационное приложение с пакетом обновления версии 1, а на сервер загрузил пакет обновления версии 2. После нажатия кнопки Check for Updates приложение обнаружит новую версию пакета обновления и откроет окно для обновления приложения (см. рисунок 1). После нажатия на Start менеджер обновлений обновит приложение. Если все пройдет успешно, файл MyTestFile.txt будет добавлен в папку приложения.

Ссылки

Скачать последнюю версию системы LiteUpdate (исходники проекта и инсталляционный файл LiteUpdate Develop) можно по адресу: http://www.gordago.ru/opensource/liteupdate/download.html

Лицензия

Система LiteUpdate и студия LiteUpdate Develop – бесплатный программный продукт, реализованный под лицензией GNU Lesser General Public License.

Заключение

Прежде всего хотелось бы выразить благодарность разработчикам Open Source-продуктов, в частности SharpDevelop и DockPanel Suite, библиотеки которых используются в разработке системы LiteUpdate.

Также выражаю благодарность за то, что прочли статью до конца.


Эта статья опубликована в журнале RSDN Magazine #4-2007. Информацию о журнале можно найти здесь
    Сообщений 10    Оценка 15 [+0/-2]         Оценить