Данной статьей я начинаю цикл статей, посвященных технологии Windows Installer от Microsoft. Эта статья носит по большей части обзорный характер. В процессе изучения темы я обнаружил, что найти нужную информацию на русском языке практически невозможно. Более того, и на английском языке, за исключением первоисточников в MSDN, очень мало полезной информации. Скромно надеюсь, что данный цикл статей исправит этот пробел.
Технология Windows Installer возникла не на пустом месте, поэтому, прежде чем погрузиться в ее изучение, оглянемся назад лет на 10-15.
Если мы вернемся в "золотые" времена DOS, то обнаружим, что в то время каждая фирма-поставщик программного обеспечения извращалась по-своему. Не было никакого общего интерфейса пользователя, никаких унифицированных приемов работы с ПО (я не рассматриваю счастливых владельцев компьютеров от фирмы Apple с единым уже в то время пользовательским интерфейсом). Поэтому неудивительно, что не было и единой технологии инсталляции программных продуктов.
Время шло – появилась первая версия Windows (на мой взгляд – просто интересная игрушка), за ней – вторая. Миру ПК попытались дать унифицированный пользовательский интерфейс (пока неудачно), но с точки зрения технологии инсталляции ничего не изменилось: каждый производитель ПО продолжал удивлять нас разнообразными несовместимыми друг с другом инсталляторами.
Ситуация немного начала меняться к лучшему с выходом Windows 3.0, которая наконец-то стала стандартом де-факто пользовательского интерфейса для ПК. Но… с точки зрения инсталляции ничего не изменилось. По-прежнему не было единой базы программ, установленных на компьютере, и не было никакого API для создания унифицированных, совместимых друг с другом и, самое главное, надежных программ инсталляции.
Поэтому вполне естественно, что отсутствие интегрированного решения от поставщика операционной системы позволило занять эту нишу сторонним компаниям-разработчикам. Наиболее известные из них – InstallShield Software и WiseSolutions. Эти компании принесли унифицированный интерфейс в мир программ-инсталляторов и сыграли немалую роль в формировании у пользователей представления о том, как должна выглядеть и вести себя программа инсталляции сложного программного продукта.
И вот в 1995 году вышла совершенно новая версия Windows (по утверждению Microsoft, многие авторитетные источники считают, что действительно новой была версия Windows со скромным номером 3.11, а Windows 95 всего лишь принесла новый пользовательский интерфейс). В этой версии Windows появилось важное новшество: единая база установленных программ.
Но, кроме хранения списка установленных программ и возможности запуска внешних программ инсталляции, эта версия Windows ничего больше не предложила. В результате осталась нерешенной проблема с различными версиями библиотек динамической компоновки (далее по тексту - DLL), с переписыванием системных DLL и т.д.
Следующие версии Windows не принесли ничего нового, немногим лучше оставалась ситуация и в WindowsNT. Технология Setup API, унаследованная еще от Windows 3.x, была очень ограниченной и использовалась (впрочем, используется и сейчас) в основном для установки различных драйверов.
Настоящий прорыв в области управления инсталляцией программ произошел с появлением Windows2000, которая принесла с собой очень много нового. Я не буду рассматривать все новшества, а упомяну только те, что касаются управления инсталляцией программ: это Windows File Protection и… Windows Installer. Эти технологии тесно связаны друг с другом. Первая позволяет решить извечную проблему Windows: так называемый DLL Hell. Вторая, которой собственно и посвящена эта статья, гораздо шире и сложнее. Рассмотрению вопроса, что же такое 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 поддерживает ограниченное подмножество языка. |
Итак, продолжим. Что же такое технология Windows Installer, о которой я написал уже десяток абзацев, но еще ничего так толком и не сказал? Чем она так замечательна? Что в ней нового по сравнению с уже существующими решениями?
Windows Installer – это сервис установки и конфигурирования программных продуктов. Он поставляется как неотъемлемая часть операционных систем Windows 2000 и Windows Me, а также может устанавливаться в ОС Windows 95, Windows 98 и Windows NT 4.0 вместе с пакетами обновления этих операционных систем или в качестве отдельного дистрибутива.
Появилась эта технология в результате усилий фирмы Microsoft по созданию инсталлятора, удовлетворяющего требованиям корпораций к развертыванию и сопровождению программного обеспечения (не забывайте, что основными потребителями продукции Microsoft являются корпоративные клиенты). Но возможности, предоставляемые данной технологией, естественно, востребуются не только корпорациями.
Основная цель этой технологии: уменьшение так называемой совокупной стоимости владения (TCO – Total Cost of Ownership) для пользователей программных продуктов за счет эффективных средств развертывания и конфигурирования ПО. Надо отметить, что Windows Installer – это только часть (хотя и очень важная) усилий Microsoft по снижению стоимости развертывания, использования и сопровождения ПО для персональных компьютеров.
На каждом компьютере, использующем Windows Installer, хранится единая база данных с информацией о каждом установленном с помощью этой технологии приложении. Эта информация включает файлы, записи в реестре и компоненты. При удалении приложения с машины Installer проверяет базу данных, чтобы удостовериться в том, что не будут удалены файлы, ключи реестра и компоненты, от которых зависят другие приложения. Таким образом, удаление приложения становится практически безопасным для других программ, имеющихся на компьютере.
Выгода от использования модулей инсталляции для Windows Installer заключается в том, что они облегчают процесс установки и обновления программных продуктов пользователям. Эти модули могут работать на любой 32-хбитной платформе Windows, начиная от Windows 95 и заканчивая Windows XP. Пользователи этих операционных систем получают много преимуществ от использования технологии Windows Installer, а именно:
Пользователи этих систем получают еще больше преимуществ, а именно:
Другое название для данной возможности: инсталляция по требованию. На новых платформах Windows Installer публикует приложение, помещая его значок на рабочий стол и в меню Пуск, при этом не происходит копирование никаких файлов приложения на жесткий диск компьютера. Приложение доступно пользователю, но не занимает места на диске до тех пор, пока пользователь не решит запустить его. Только в этот момент Windows Installer копирует и устанавливает все необходимые файлы и компоненты на компьютер.
Администраторы систем Windows 2000 могут использовать эту возможность для добавления иконок приложений в меню Пуск сразу на многих машинах без установки программ до тех пор, пока они реально не понадобятся пользователю. Это позволяет системным администраторам поддерживать единую рабочую среду на множестве компьютеров под управлением Windows 2000, а пользователям иметь доступ ко всем приложениям, и в то же время не устанавливать ненужные на данный момент программы.
Администраторы систем Windows 2000 могут разрешать пакетам инсталляции запускаться с привилегиями администратора на пользовательских машинах. Это позволяет устанавливать программное обеспечение на "закрытых" Windows 2000 компьютерах, то есть на таких компьютерах, где обычные пользователи не имеют привилегий делать то, что позволяется делать программе инсталляции.
То, что пользователям выгодно использовать данную технологию, сомнений не возникает. Но мы-то с вами не рядовые пользователи, мы – разработчики программного обеспечения (на мой взгляд, это должно звучать гордо). Что нам дает Windows Installer, кроме еще одной головной боли от необходимости изучать нечто новое? А вот что (и это немало):
Я думаю, тот, кто работал с InstallShield Professional (пакет для создания инсталляций, управляемых скриптом) и InstallShield Developer (пакет для создания инсталляций на основе Windows Installer, раньше назывался InstallShield for Windows ), поймет, насколько более гибко последний позволяет управлять созданием разных инсталляций на основе единого набора данных.
ПРИМЕЧАНИЕ Раньше InstallShield Developer назывался InstallShield for Windows Installer |
Что касается первого утверждения, непонятного на первый взгляд, то в нем все просто. Посмотрите на следующий заголовок – он все объясняет.
Традиционно программы инсталляции используют для управления процессом установки программ скрипты. Каждая инсталляционная программа содержит скрипт, то есть набор инструкций по установке конкретного программного продукта. Эти жестко закодированные инструкции могут прекрасно работать для данной конкретной инсталляции, но они же могут вызывать проблемы в случаях переустановки или удаления продукта, а также установки новых версий. Более того, эти проблемы могут возникнуть при инсталляции других программ, о которых вы даже не подозревали, когда писали свой скрипт. К тому же, так как информация о приложениях не разделяется между скриптами, администраторам и пользователям трудно управлять инсталляцией приложений.
Новая, управляемая данными технология Windows Installer позволяет решить многие проблемы инсталляторов, управляемых скриптами. В модели инсталляции, управляемой данными, создается набор инсталляционных таблиц, в которых каждый ресурс (файлы, ключи реестра и т.д.) явным образом привязан к компоненту или опции приложения, которые его используют. При создании этих таблиц разработчик больше думает о том, что он устанавливает, вместо того, чтобы думать о том, как это устанавливать. То есть разработчик фокусируется на объектах, которые нужно установить и на местоположении этих объектов на целевой машине, а Windows Installer обеспечивает всю остальную функциональность. Тем не менее, это не освобождает разработчика от необходимости думать о том, как же будет устанавливаться приложение.
Все вышесказанное взято из документации Microsoft. Многие разработчики (в том числе и я) не во всем согласны с этими утверждениями. Но нельзя отрицать и того, что технология Windows Installer все-таки здорово облегчает жизнь системным администраторам и разработчикам. Таким образом, мы плавно переходим от общих тем к более конкретным вопросам. В данной статье я ограничусь рассмотрением Пакета инсталляции. Остальные вопросы, а именно: интерфейс пользователя, последовательность выполнения инсталляции, свойства, стандартные и пользовательские операции, включаемые модули и многие другие, будут рассмотрены в следующих статьях. |
Итак, что же представляет собой пакет инсталляции для Windows Installer? Обычно инсталляционные пакеты хранятся в файлах с расширением .msi и представляют собой реляционную базу данных, хранящую всю логику и данные, необходимые для правильной установки программного продукта. А доступом к этим данным управляет непосредственно Windows Installer. То есть, как и любая другая база данных, пакет инсталляции состоит из множества связанных друг с другом таблиц. Так как база данных является реляционной, таблицы связываются с помощью первичных и внешних ключей. Это обеспечивает эффективный способ управления процессом инсталляции и позволяет пользователям с легкостью приспосабливать сложное приложение или даже группу приложений к своим нуждам. Таблицы базы данных отражают общую схему приложения, включающую:
ПРИМЕЧАНИЕ Справедливости ради надо сказать, что реально инсталлятор обычно использует только порядка 30-35 из них. |
Поэтому гораздо проще и удобнее использовать пакеты для создания инсталляторов. К ним относятся, например Visual Studio Installer, Wise Installer, InstallShield Developer и некоторые другие, не столь широко известные пакеты. Кстати, многие пакеты создания инсталляторов включают в базу данных свои дополнительные таблицы, например, в пакетах, созданных с помощью InstallShield Developer количество таблиц достигает 113! При этом никто не запрещает нам, как разработчикам, определять и добавлять свои таблицы, дополняя тем самым модель данных Windows Installer.
ПРИМЕЧАНИЕ Вышесказанное справедливо для Windows Installer версии 2.0, который позволяет распространять и устанавливать приложения для новой перспективной платформы Microsoft - .NET Framework. |
Я не буду приводить полный список этих таблиц, так как он займет слишком много места. Вместо этого выделим основные группы таблиц и рассмотрим их подробнее.
В базе данных пакета инсталляции можно выделить семь основных групп:
Эта группа состоит из таблиц, описывающих основные опции и компоненты приложения и пакета его инсталляции. Эта группа должна заполняться в первую очередь, так как от ее содержимого зависит организация всей остальной части базы данных. Структура этой группы показана на рисунке 1.
Рисунок 1. Структура группы Базовые таблицы
На этой и на последующих диаграммах черный круг, соединенный с белым ромбом обозначает отношение один-ко-многим между первичным ключом в первой таблице и внешним ключом во второй. |
Таким образом, мы видим, что эта группа состоит из 11 связанных таблиц. Ниже приведены их краткие описания:
Имя таблицы | Краткое описание |
---|---|
Feature | Содержит список всех функций программного продукта |
Condition | Содержит условия определяющие порядок установки каждой функции, описанной в таблице Feature 1 |
FeatureComponents | Связывает функции с компонентами, иными словами – эта таблица определяет, какой функции принадлежит компонент 2 |
Component | Содержит список всех компонентов приложения |
Directory | Содержит список всех каталогов, необходимых для инсталляции |
PublishComponent | Содержит список функций и компонентов, публикуемых для использования в других приложениях |
Assembly | Задает установки для сборок .NET Framework CLR и Win32 |
AssemblyName | Задает схему для именования сборок .NET Framework CLR и Win32 |
Complus | Содержит информацию, необходимую для установки приложений COM+ |
IsolatedComponent | Связывает компонент, заданный в столбце Component_Application (обычно .exe) с компонентом, заданным в столбце Component_Shared (обычно .dll) |
Upgrade | Содержит информацию для значительных обновлений программного продукта 3 |
|
Эта группа таблиц содержит информацию обо всех файлах, составляющих программный продукт. Большая часть этих файлов перечислена в таблице File. Таблица Directory не входит в эту группу, но, тем не менее, очень тесно связана с ней, так как отражает структуру каталогов приложения. При разработке инсталляционного пакета эта группа таблиц должна заполняться после того, как приложение разбито по функциям и компонентам и заполнена группа Базовых таблиц.
ПРИМЕЧАНИЕ Такие пакеты как InstallShield Developer и Wise Installer позволяют не придерживаться такого жесткого порядка заполнения таблиц. Но рекомендуется все-таки тщательно продумать структуру пакета инсталляции перед тем, как начать заполнять базу данных. |
Структура этой группы показана на рисунке 2.
Рисунок 2. Структура группы Файловые таблицы
Эта группа состоит из 15 таблиц. Их краткое описание дано ниже.
Имя таблицы | Краткое описание |
---|---|
File | В этой таблице перечислены файлы, входящие в инсталляцию. Так как файлы привязаны к компонентам, их использующим, эта таблица связана с таблицей Component |
RemoveFile | В этой таблице содержится список файлов, которые необходимо удалить при выполнении операции RemoveFiles |
Font | Эта таблица содержит список файлов шрифтов, которые необходимо зарегистрировать в системе |
SelfReg | Эта таблица содержит список саморегистрирующихся модулей (то есть библиотек динамической компоновки, экспортирующих функции DllRegisterServer и DllUnregisterServer). Installer не регистрирует EXE-файлы |
Media | Эта таблица описывает набор дисков инсталляции |
BindImage | Эта таблица содержит информацию о привязках исполняемых файлов или DLL 1 |
MoveFile | Эта таблица содержит список файлов, которые нужно перенести или скопировать во время инсталляции из исходного каталога в заданный каталог |
DuplicateFile | Эта таблица содержит список файлов, которые необходимо продублировать при инсталляции: либо в другой каталог с тем же именем, что и исходный файл, либо в тот же каталог, но с другим именем |
IniFile | В этой таблице содержится информация для создания .ini-файлов, необходимых приложению. Эти файлы создаются, если содержащий их компонент выбран для инсталляции в локальном режиме или с источника инсталляции |
RemoveIniFile | Эта таблица содержит информацию, которую необходимо удалить из .ini-файлов при инсталляции приложения |
Environment | Эта таблица используется для задания переменных окружения 2 |
Icon | Эта таблица хранит файлы иконок. Каждая иконка этой таблицы во время инсталляции копируется в отдельный файл на диске 3 |
FileSFPCatalog | Эта таблица используется системой Windows File Protection в ОС Windows Me |
SFPCatalog | Эта таблица также используется системой Windows File Protection в ОС Windows Me |
MsiFileHash | Эта таблица хранит 128-разрядное хэш-значение для исходных файлов в пакете инсталляции 4 |
|
Эта группа содержит таблицы, описывающие различные виды информации в реестре Windows. Структура группы показана на рисунке 3.
Рисунок 3. Структура группы таблиц Записи в реестре Windows.
Внимательный читатель, конечно же, заметил, что на рисунке присутствуют таблицы из других групп, такие, как Component, Feature и File. Эти таблицы включены сюда для того, чтобы более ясно показать логику работы этой группы. Кроме того, здесь присутствуют таблицы, уже упоминавшиеся в других группах, но здесь играющие немного другую роль (это таблицы SelfReg и Environment).
Таким образом, эта группа включает 11 таблиц, краткое описание которых дано ниже:
Имя таблицы | Краткое описание |
---|---|
Extension | Эта таблица содержит список расширений файлов, используемых устанавливаемой программой, вместе с привязанными к этим расширениям функциями и компонентами |
Verb | Эта таблица связывает информацию о командах, связанных с расширениями файлов из предыдущей таблицы. Наличие этих таблиц в связке с таблицей Feature позволяет реализовать возможность публикации приложения |
TypeLib | Эта таблица содержит записи, необходимые для регистрации библиотек типов 1 |
MIME | Эта таблица связывает типы MIME c CLSID или расширением файла. Это позволяет связать таблицы MIME и Feature, и обеспечить еще один путь для публикации приложения |
SelfReg | Смотрите описание в группе Файловые операции 2 |
Class | Эта таблица содержит информацию, необходимую для работы COM-серверов |
ProgId | Эта таблица содержит информацию о ProgID для COM-серверов |
AppId | Эта таблица используется для конфигурирования DCOM-серверов |
Environment | Смотрите описание в группе Файловые таблицы 3 |
Registry | Эта таблица содержит всю прочую информацию, не вошедшую в другие таблицы. Это может быть пользовательская информация, данные, установки по умолчанию и т.д. |
RemoveRegistry | Эта таблица содержит информацию о записях в реестре, которые нужно удалить при инсталляции приложения |
|
При заполнении этой группы нужно попытаться сделать таблицу Registry как можно компактней, поместив как можно больше информации в другие, более специфичные таблицы. Это делается, потому что Installer не может выделить различные типы реестровых записей в таблице Registry и, следовательно, не может использовать внутреннюю логику для задействования всех своих возможностей, например – публикации или установки по требованию. Кроме того, такой способ организации данных поможет уменьшить риск записи лишней информации о COM-серверах. |
Эта группа содержит информацию о структуре инсталляционной базы данных. Запросы к таблицам этой группы позволяют получить разнообразную информацию о пакете инсталляции любого приложения.
Диаграмму этой группы приводить смысла нет. Некоторые таблицы этой группы – статические, они создаются при компиляции пакета инсталляции и не связаны с другими таблицами. Другая же часть вообще не хранится в базе данных, а создается только на время выполнения SQL-запросов.
Итак, эта группа состоит из 5 таблиц, краткое описание которых дано ниже:
Имя таблицы | Краткое описание |
---|---|
_Tables | Хранит имена всех таблиц инсталляционной базы данных, включая созданные автором пакета для личных целей (например, для использования в своих операциях). Эта таблица доступна только на чтение |
_Columns | Хранит информацию обо всех столбцах в таблицах инсталляционной базы данных. Но временные столбцы в этой таблице не хранятся. Как и предыдущая таблица, доступна только на чтение |
_Streams | Содержит потоки данных OLE. Эта таблица временная и создается только при выполнении определенных SQL-запросов, например, при выполнении функции MsiRecordReadStream |
_Storages | Содержит хранилища данных OLE. Эта таблица также временная и создается только при выполнении определенных SQL-запросов, например, при выполнении функции MsiRecordSetStream |
_Validation | Эта таблица содержит информацию о столбцах в таблицах базы данных, включая их имена и диапазоны допустимых значений, а также другую важную для базы данных информацию. Используется только при проверке целостности базы данных |
Таблицы поиска используются для поиска файлов и приложений на компьютере пользователя. Чтобы найти файл, нужно сначала задать сигнатуру файла, а затем произвести поиск. Таблицы этой группы можно использовать для поиска в реестре, в данных конфигурации инсталлятора, по дереву каталогов или в .ini-файлах. При этом ищется файл или каталог с заданной уникальной сигнатурой. Затем, если файл найден, его сигнатура проверяется по таблице Signature, чтобы убедиться, что данный файл действительно тот, который нужен, а не просто еще один файл с таким же именем. Если запись в таблице поиска не связана с таблицей Signature, значит, запись ссылается на каталог, а не на файл.
Компонент, которому принадлежит нужный файл, определяется через связь между таблицами File и Component. Installer определяет подчиненность файла через таблицу компонентов, потому что каждый файл связан с одним компонентом. Местоположение компонента определяется по внешнему ключу в таблице Component, указывающему на таблицу Directory.
Нужные приложения ищутся аналогично: при этом находятся определенные файлы, из которых состоит приложение. Installer также предоставляет две таблицы, позволяющие искать предыдущие версии приложений: AppSearch и CCPSearch.
Группа таблиц поиска состоит из 7 таблиц, описание которых дано ниже:
Имя таблицы | Краткое описание |
---|---|
Signature | Содержит информацию, уникальным образом описывающую некоторый файл 1 |
RegLocator | Эта таблица содержит информацию, необходимую для поиска файлов или каталогов по записям в реестре |
IniLocator | Эта таблица используется для поиска .ini-файлов. Эти файлы должны быть расположены в корневом каталоге Windows |
CompLocator | Эта таблица используется для поиска файлов или каталогов с использованием конфигурационных данных Windows Installer |
DrLocator | Эта таблица используется для поиска по дереву каталогов |
AppSearch | Эта таблица содержит список свойств, которые должны быть установлены, если нужный файл или каталог с заданной сигнатурой найден |
CCPSearch | Эта таблица содержит список сигнатур файлов, из которых хотя бы один должен быть установлен на пользовательском компьютере. Таблица используется при обновлении программ |
|
Таблицы этой группы содержат важную информацию о пакете инсталляции, используемую на протяжении всего процесса инсталляции.
Состоит эта группа из пяти таблиц:
Имя таблицы | Краткое описание |
---|---|
Property | В этой таблице хранятся все свойства 1 пакета инсталляции |
Binary | В этой таблице хранятся двоичные данные для иконок, растров и т.п. Также здесь хранятся данные для пользовательских операций |
Error | Эта таблица используется для поиска шаблонов форматирования при обработке ошибок. Installer имеет свой собственный механизм обработки ошибок |
Shortcut | Здесь хранится вся информация, необходимая для создания файловых ярлыков |
ReserveCost | Эта таблица содержит информацию о необходимом дисковом пространстве для каждого компонента приложения |
ПРИМЕЧАНИЕ
|
Таблицы этой группы управляют выполнением стандартных и пользовательских операций.
ПРИМЕЧАНИЕ Тема операций в Windows Installer обширна и ей будет посвящена одна из следующих статей. |
Некоторые из таблиц этой группы управляют последовательностью выполнения операций на самом высоком уровне. Каждая из следующих таблиц управляет своей частью процесса.
Имя таблицы | Краткое описание |
---|---|
InstallUISequnce | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции INSTALL и уровне пользовательского интерфейса – полный или сокращенный. Installer пропускает операции из этой таблицы, если уровень пользовательского интерфейса установлен в базовый или отключен 1 |
InstallExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции INSTALL 1, 2 |
AdminUISequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADMIN и уровне пользовательского интерфейса – полный или сокращенный. Installer пропускает операции из этой таблицы, если уровень пользовательского интерфейса установлен в базовый или отключен 3 |
AdminExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADMIN 2, 3 |
AdvtUISequence | Installer не использует эту таблицу. Она должна быть удалена из базы данных или быть пустой |
AdvtExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADVERTISE 4 |
|
К другой группе относятся таблицы, позволяющие расширять функциональность пакета инсталляции. Достаточно часто, особенно при установке сложных программных продуктов, встроенной функциональности Windows Installer, основанной на стандартных операциях, не хватает. Здесь и приходит на помощь таблица Custom Action, позволяющая создавать и хранить в инсталляционной базе данных информацию для выполнения пользовательских операций.
Эта таблица позволяет легко и просто интегрировать пользовательский код и данные в процесс инсталляции приложения. Исполняемый код может браться прямо из базы данных, только что установленного файла или из уже существующего на компьютере исполняемого файла.
Следующая группа таблиц расширяет возможности инсталлятора по манипулированию файлами и каталогами в процессе инсталляции.
Имя таблицы | Краткое описание |
---|---|
RemoveFile | Эта таблица содержит список файлов, которые необходимо удалить при инсталляции |
RemoveIniFile | Эта таблица содержит информацию, которую нужно удалить из .ini-файлов при инсталляции приложения |
RemoveRegistry | Эта таблица содержит информацию, которую нужно удалить из реестра при инсталляции связанного с ней компонента |
CreateFolder | Содержит список каталогов, которые необходимо создать при инсталляции приложения 1 |
MoveFile | Эта таблица содержит список файлов, которые нужно перенести или скопировать во время инсталляции из исходного каталога в заданный каталог |
|
И, наконец, последняя в списке, но далеко не последняя по значимости таблица, управляющая выполнением инсталляции: LaunchCondition. Эта таблица содержит список условий, при выполнении которых может начаться процесс инсталляции. Следует заметить, что эта таблица управляет процессом в целом и для успешного запуска процесса инсталляции необходимо выполнение ВСЕХ содержащихся в ней условий.
Список таблиц, используемых Windows Installer, весьма велик. И вполне естественно, что в рамках статьи невозможно рассмотреть все из них. Многие из таблиц, не упоминавшихся здесь, будут рассмотрены в следующих статьях, при рассмотрении более узких тем.
Таблицы – это конечно, хорошо. Но как добраться до содержимого этих таблиц? И как изменять эти таблицы? То есть, говоря иными словами, как можно работать с базой данных инсталляционного пакета?
Для этого существует Windows Installer API. Этот API весьма обширен и включает в себя несколько десятков функций, различных констант и агрегатных типов данных. Все функции Windows Installer API поддерживают как ANSI, так и Unicode. Это позволяет использовать их как в операционных системах на основе Windows NT, для которых кодировка Unicode является родной, так и в системах Windows 9x, ограниченно поддерживающих Unicode.
Все функции Windows Installer API легко найти по префиксу – Msi.
Функции API можно условно разделить на две большие группы:
Эта большая группа функций делится на следующие группы:
Функции доступа к базе данных используются в пользовательских операциях, выполняемых во время инсталляции программ, и в инструментальных утилитах (например, в тех же ORCA и MsiSpy из Platform SDK). Некоторые из этих функций используют подмножество языка SQL для запросов к базе данных.
Функции доступа к базе данных можно разделить на следующие группы:
На этом я хочу закончить первую часть цикла. Надеюсь, что вы получили достаточно ясное общее представление о технологии Windows Installer и преимуществах ее применения для инсталляции программных продуктов. В следующей статье я хочу рассказать о том, как же собственно выполняется инсталляция приложений, какие процессы при этом происходят, и какие данные из вышерассмотренных таблиц используются.
Документация к Platform SDK