Алифанов Андрей
Технология Windows Installer
Часть I. Обзор возможностей
Предисловие
Данной статьей я начинаю цикл статей, посвященных технологии Windows Installer от Microsoft. Эта статья носит по большей части обзорный характер. В процессе изучения темы я обнаружил, что найти нужную информацию на русском языке практически невозможно. Более того, и на английском языке, за исключением первоисточников в MSDN, очень мало полезной информации. Скромно надеюсь, что данный цикл статей исправит этот пробел.
Технология Windows Installer возникла не на пустом месте, поэтому, прежде чем погрузиться в ее изучение, оглянемся назад лет на 10-15.
Немного истории
"Золотые" времена DOS
Если мы вернемся в "золотые" времена DOS, то обнаружим, что в то время каждая фирма-поставщик программного обеспечения извращалась по-своему. Не было никакого общего интерфейса пользователя, никаких унифицированных приемов работы с ПО (я не рассматриваю счастливых владельцев компьютеров от фирмы Apple с единым уже в то время пользовательским интерфейсом). Поэтому неудивительно, что не было и единой технологии инсталляции программных продуктов.
Время шло - появилась первая версия Windows (на мой взгляд - просто интересная игрушка), за ней - вторая. Миру ПК попытались дать унифицированный пользовательский интерфейс (пока неудачно), но с точки зрения технологии инсталляции ничего не изменилось: каждый производитель ПО продолжал удивлять нас разнообразными несовместимыми друг с другом инсталляторами.
Ситуация немного начала меняться к лучшему с выходом Windows 3.0, которая наконец-то стала стандартом де-факто пользовательского интерфейса для ПК. Но… с точки зрения инсталляции ничего не изменилось. По-прежнему не было единой базы программ, установленных на компьютере, и не было никакого API для создания унифицированных, совместимых друг с другом и, самое главное, надежных программ инсталляции.
Поэтому вполне естественно, что отсутствие интегрированного решения от поставщика операционной системы позволило занять эту нишу сторонним компаниям-разработчикам. Наиболее известные из них - InstallShield Software и WiseSolutions. Эти компании принесли унифицированный интерфейс в мир программ-инсталляторов и сыграли немалую роль в формировании у пользователей представления о том, как должна выглядеть и вести себя программа инсталляции сложного программного продукта.
Windows 95
И вот в 1995 году вышла совершенно новая версия Windows (по утверждению Microsoft, многие авторитетные источники считают, что действительно новой была версия Windows со скромным номером 3.11, а Windows 95 всего лишь принесла новый пользовательский интерфейс). В этой версии Windows появилось важное новшество: единая база установленных программ.
Но, кроме хранения списка установленных программ и возможности запуска внешних программ инсталляции, эта версия Windows ничего больше не предложила. В результате осталась нерешенной проблема с различными версиями библиотек динамической компоновки (далее по тексту - DLL), с переписыванием системных DLL и т.д.
Следующие версии Windows не принесли ничего нового, немногим лучше оставалась ситуация и в WindowsNT. Технология Setup API, унаследованная еще от Windows 3.x, была очень ограниченной и использовалась (впрочем, используется и сейчас) в основном для установки различных драйверов.
Приход Windows 2000
Настоящий прорыв в области управления инсталляцией программ произошел с появлением Windows2000, которая принесла с собой очень много нового. Я не буду рассматривать все новшества, а упомяну только те, что касаются управления инсталляцией программ: это Windows File Protection и… Windows Installer. Эти технологии тесно связаны друг с другом. Первая позволяет решить извечную проблему Windows: так называемый DLL Hell. Вторая, которой собственно и посвящена эта статья, гораздо шире и сложнее. Рассмотрению вопроса, что же такое Windows Installer, для чего, где и как применяется, и будет посвящена оставшаяся часть статьи.
Windows Installer - новое слово в технологиях инсталляции
Прежде, чем продолжить, необходимо ввести минимально необходимый для понимания дальнейшего текста набор терминов, используемых в Windows Installer. Таблица ниже включает список, достаточный для понимания текста данной статьи, в следующих статьях при необходимости будут добавлены новые термины.
Термин | Краткое описание |
---|---|
Внешний пользовательский интерфейс | Пользовательский интерфейс, не использующий встроенные возможности Windows Installer. Такой интерфейс использует, например, инсталлятор Microsoft Visual Studio.NET. |
Встроенный пользовательский интерфейс | Пользовательский интерфейс, основанный на встроенных возможностях Windows Installer. Инсталляторы с таким интерфейсом работают в режиме Мастера, то есть инсталляция выполняется пошагово. Такой интерфейс используют, например, инсталляторы Microsoft Office 2000 и XP. |
Патч (заплата) | Метод обновления файлов на уровне изменения байтов, а не замены файла целиком. Применяется при мелких обновлениях. |
Инсталляционная база данных | Реляционная база данных, содержащая всю необходимую логику и данные для установки приложения |
Инсталляция по требованию | Служба Installer, позволяющая устанавливать приложение или его опции только, когда их запрашивает пользователь или другое приложение |
Код пакета | Глобально уникальный идентификатор (GUID) пакета (модуля инсталляции) |
Компонент | Наименьшая часть инсталляции, обрабатываемая инсталлятором, а также часть функциональности приложения с точки зрения программиста |
Обновление | Установка самой последней версии приложения |
Операция | Инкапсуляция некоторой типичной функции, выполняемой во время инсталляции или обновления приложения. |
Опция | Часть функциональности приложения, видимая со стороны пользователя |
Оценка стоимости | Метод, используемый Windows Installer для оценки дискового пространства, необходимого приложению |
Откат | Автоматическое восстановление оригинальной конфигурации компьютера при сбоях в установке |
Пакет (модуль) инсталляции | Состоит из .msi-файла и внешних, связаных с ним файлов. Содержит всю логику, необходимую для установки и удаления приложения. |
Подключаемый модуль | База данных, содержащая наборы компонентов. Позволяет создавать пакеты инсталляции из готовых наборов компонентов. Отдельно устанавливаться не может. |
Пользовательская операция | Операция, определенная разработчиком пакета инсталляции. |
Свойство | Глобальная переменная, используемая Windows Installer при интсалляции приложения |
Стандартная операция | Встроенная в Windows Installer предопределенная операция, например, CreateShortcuts или InstallFiles. |
Таблицы последовательности установки | Таблицы в инсталляционной базе данных, задающие правила установки |
Трансформация | Шаблон изменений, используемый для добавления или замены элементов исходной базы данных. Применяется, например, для замены языка приложения. |
Уровень базового пользовательского интерфейса | Уровень, при котором Windows Installer обеспечивает простой пользовательский интерфейс с немодальными диалогами. На этом уровне недоступно использование пользовательских диалогов. |
Уровень инсталляции | Уровень, задаваемый для каждой инсталляции. Приложение устанавливается только если его уровень меньше или равен уровню инсталляции. Таким образом, можно управлять инсталляцией наборов приложений. |
Уровень полного пользовательского интерфейса | Уровень, при котором можно задействовать все встроенные возможности пользовательского интерфейса Windows Installer |
Уровень сокращенного пользовательского интерфейса | Уровень, при котором Windows Installer обеспечивает интерфейс с немодальными пользовательскими диалогами. Также могут использоваться встроенные модальные диалоги для сообщений об ошибках. |
SQL (Structured Query Language) | Язык запросов, используемый для работы с реляционными базами данных. Windows Installer поддерживает ограниченное подмножество языка. |