Visual Patch. Патчи - это простоАвтор: Виктор Деревянко Опубликовано: 17.10.2008 Источник: SoftKey.info Вы разработали новый программный продукт и начали его продавать. Продукт удачный, продается хорошо, пользователи довольны. Но, как известно, в любом продукте обязательно обнаруживаются ошибки. Ошибки вы оперативно исправляете, новая версия продукта готова. Возникает вопрос - как ее распространить среди пользователей?
Вопрос не так тривиален, как это может показаться. Да, конечно, можно выложить дистрибутив новой версии у себя на сайте - пусть пользователи его скачивают и устанавливают. Однако этот способ оптимален не всегда.
Проблемы возникают в том случае, если: а) дистрибутив вашего продукта достаточно объемный; б) вы стараетесь идти в ногу со временем, поэтому ошибки исправляете оперативно, и новые минорные версии продукта регулярно появляются у вас сайте. Далеко не каждому пользователю понравится постоянно выкачивать десятки и сотни мегабайт. И безлимитный Интернет есть далеко не у всех, и времени такое выкачивание занимает прилично. Обиднее всего, что большая часть выкачиваемой информации у пользователя уже есть. Если программа установки содержит 10 файлов, а исправление вы внесли только в один, то 9 из 10 файлов пользователь скачает впустую. И в оставшемся файле, порой, изменены всего лишь несколько байт...
Проблема решается путем использования технологии создания патчей или "заплаток". Если дистрибутив продукта содержит абсолютно все файлы, необходимые для установки продукта на компьютер пользователя, то патч включает лишь изменения, необходимые для обновления уже установленного продукта до новой версии. Характерно, что модифицированный файл, как правило, не включается в патч целиком - вместо этого в патч записываются лишь внесенные в этот файл изменения, в виде так называемой "дельты". В результате, размеры таких патчей не идут ни в какое сравнение с размером полного дистрибутива. Технология созданий патчей широко применяется, в частности, в игровой индустрии. Если средние размеры игр сейсчас составляют гигабайты, то средние размеры патчей к ним - как минимум на порядок меньше.
Создать патч для текстового или бинарного файла не так сложно. Например, можно воспользоваться стандартными средствами от Microsoft, входящими в Platform SDK. Или использовать бесплатную утилиту XDelta for Windows. Однако, возможность вычисления "дельты" между двумя файлами - это далеко не все, что требуется для эффективной работы. На практике возникает масса других проблем. Система создания патчей должна уметь самостоятельно определять, какие именно файлы необходимо включить в патч. Создаваемы патчи должны быть самораспаковывающимеся. В процессе работы они должны уметь распознавать версию продукта, установленную на компьютере пользователя и срабатывать только в том случае, если версия подходящая. В многих случаях патчи должны уметь выполнять ряд действий, связанных с обновлением - изменять ключи регистра, обращаться к базам данных, взаимодействовать с пользователем через графически интерфейс и т.д. и т.п. Другими словами, если вы планируете регулярное создание патчей, имеет смысл задуматься о специальном программном обеспечении, предназначенном для этих целей.
Компания Indigo Rose выпускает целую линейку продуктов, связанных с различными аспектами распространения программного обеспечения. В нее входят продукт
TrueUpdate, предназначенный для автомататизации обновления, продукты MSI Factory и Software Factory - для разработки программ установки. Имеется в ней и продукт, предназначенный именно для создания патчей - Visual Patch.
Возможности Visual Patch впечатляют. Простота использования, мощный и быстрый алгоритм бинарного сравнения файлов, легко справляющийся с гигабайтными файлами и базирующийся на технологии DeltaMAX, поддержка скриптов, тем, простота интеграции с TrueUpdate и многое другое. Имеет смысл приглядеться к этому продукту повнимательнее.
Создание патчей в Visual Patch
Работа в Visual Patch начинается с создания нового проекта. Точнее - с запуска пошагового мастера, создающего проект. На первом шаге вы указываете название вашей компании и название продукта. На следующем - выбираете тип интерфейса пользователя, который будет реализован в создаваемом патче. Возможные варианты - диалог в виде "мастера", простые диалоговые окна и безинтерфейсный вариант, в котором патч ставится скрыто от пользователя, не задавая вопросов и не отображая каких-либо окон.
Далее необходимо сформировать начальный список версий продукта. Для каждой версии нужно указать номер версии, имя ключевого файла и путь к директории, содержащей все файлы, принадлежащие данной версии. Ключевой файл - это файл, по которому можно однозначно идентифицировать версию продукта. В принципе, Visual Patch позволяет задать для каждой версии сколько угодно ключевых файлов, однако в мастере создания нового проекта можно выбрать один и только один файл.
На завершающих шагах работы мастера нужно настроить требуемый порядок поиска ключевых файлов патчем. Варианты - искать в текущей директории, брать путь из реестра, выполнять поиск в системе. Кроме этого, можно дополнительно настроить параметры процесса выполнения патча - указать, нужно ли создавать лог-файл, сохранять ли резервные копии пропатченных файлов, нужна ли возможность автоматически откатить все внесенные изменения в случае какой-либо оишбки и т.п.
 | | Мастер создания проекта. Задаем список версий | После завершения работы мастера вновь созданный проект открывается в главном окне программы. Рабочая область окна поделена на две части. Слева отображается панель задач, на которую вынесены основные команды по работе с файлом проекта, версиями, файлами, входящими в версии. Справа отображается список файлов выбранной версии, причем каждой версии соответствует отдельная вкладка.
 | | Последний шаг в мастере создания проекта | На данном этапе работы можно выполнить более тонкую настройку процесса создания патча. Например, в настройках каждого файла можно явно задать список операционных систем, под которыми этот файл необходимо устанавливать. В настройках проекта - зафиксировать необходимость наличия прав администратора при установке патча, выбрать визуальную тему и язык, применяемые в пользовательском интерфейсе патча. В настройках параметров сборки - задать цифровую подпись, которая будет использована для подписи создаваемых патчей, выбрать режим оптимизации процесса построения патча - по размеру патча или по скорости сборки, - указать программы, которые должны выполняться перед началом сборки и по ее окончанию.
 | | Интерфейс главного окна Visual Patch | После того, как все необходимые настройки выполнены, остается, собственно, собрать патч. Для этого необходимо дать команду "Publish->Build" и указать версии, которые должны быть использованы при создании патча.
 | | Процесс создания патча | Согласно документации, Visual Patch позволяет создавать три вида патчей: инкрементальные, мультиверсионные и патчи с полной историей. Инкрементальный патч позволяет выполнить обновление только одной конкретной версии. Мультиверсионный пригоден для обновления нескольких версий. Патч с полной историей способен обновить любую версию продукта до текущей.
На практике, необходимо выбрать как минимум две версии - начальную и конечную. Если, например, вы выберете версии 1, 2 и 3 то патч будет способен обновить установленные версии 1 и 2 до конечной версии 3. Если укажите версии 1 и 4, то патч сможет обновлять версию 1 до версии 4. И т.д.
После того, как версии выбраны, Visual Patch выполняет сборку патча. Этот процесс полностью автоматизирован. Visual Patch сам определяет какие именно файлы необходимо включить в патч и выбирает для каждого из них наиболее оптимальный метод хранения. В частности, если размер инкрементальных изменений файла от версии к версии превышает размер этого файла в последней версии, то файл будет сохранен в патче целиком.
Мощь Visual Patch - поддержка скриптов.
Стандартные возможности патчей, создаваемых с помощью Visual Patch, весьма широки, однако в некоторых случаях их может оказаться недостаточно. Например, может возникнуть потребность:
- научить патч отличать пробную версию от полнофункциональной;
- действовать по разному в зависимости от того, имеется подключение в Интернет или нет;
- подключаться к базе данных и записывать в нее необходимую информацию.
Подобных ситуаций, когда сценарий работы патча необходимо модифицировать каким-то специфическим образом, на практике может возникнуть великое множество. Замечательным свойством Visual Patch является то, что он позволяют легко справиться с такими ситуациями, позволяя программировать собственные сценарии работы патча. Делается это с применением действий ("actions"), скриптов и плагинов.
 | | Редактор скриптов в разделе "Actions" | Если коротко, то действия - это вызовы высокоуровневых функций, которые патч может выполнять в процессе выполнения. Каждое действие - это короткая текстовая инструкция, которая говорит патчу выполнить что-либо - открыть документ, скачать файл, обратиться к базе данных, считать ключ реестра и т.д. Visual Patch снабжен богатой библиотекой таких функций, позволяющих работать со строками, файлами, базами данных, Интернет, XML и т.д. и т.п. Плагины позволяют подключить дополнительные действия, а скрипты - задавать последовательность выполнения действий. В качестве скриптового языка в Visual Patch используется язык LUA.
В свойствах проекта имеется раздел "Actions", в котором можно задать скрипты, которые будут выполняться при запуске патча, при его завершении, а так же непосредственно перед и после применения патча. Интересно, что скрипт, задающий действия при запуске патча, задается по умолчанию - Visual Patch самостоятельно прописывает его текст в зависимости от настроек, выбранных вами в процессе работы мастера создания нового проекта.
Скрипты могут использоваться и в других местах проекта. Например, в разделе "Screens" в свойствах проекта можно задать собственный набор окон, составляющих графический интерфейс патча и для каждого окна прописать скрипт, задающий его функциональность.
Следует отметить, что редактор скриптов в Visual Patch выполнен на самом современном уровне. Поддерживаются технология Intellisense, шаблоны кода, подсветка синтаксиса, макросы, возможности условной "компиляции" и набор специальных средства для отладки скриптов.
Выводы. Express-версия.
Visual Patch - пример продукта, в котором удачно сочетаются простота использования и мощный функционал. Продукт без проблем может использоваться непрограммистами для создания патчей разнообразных бинарных файлов - каталогов, музыкальных, графических файлов и т.д. Но наибольшие возможности открываются, конечно же, для тех, кто готов заняться программированием - поддержка скриптов позволяет решать с помощью Visual Patch практически любые задачи, связанные с созданием патчей.
Кстати, для непрограммистов имеется специальная, более дешевая версия Visual Patch Express, в которой отключены возможности использования скриптов и создания мультиверсионных патчей.
Создание патча для большого бинарного файла. Результаты простейшего теста.
Для теста был выбран видеофайл размером в 700 мб. К файлу был добавлен один байт - получилась "новая" версия. Visual Patch успешно создал патч для перехода от "старой" версии файла к "новой" примерно за 15 минут, размер патча составил около 600 кб.
|