Технология Windows Installer. Часть I. Обзор возможностей
Шрифт:
Структура пакета инсталляции Windows Installer
Итак, что же представляет собой пакет инсталляции для Windows Installer? Обычно инсталляционные пакеты хранятся в файлах с расширением .msi и представляют собой реляционную базу данных, хранящую всю логику и данные, необходимые для правильной установки программного продукта. А доступом к этим данным управляет непосредственно Windows Installer. То есть, как и любая другая база данных, пакет инсталляции состоит из множества связанных друг с другом таблиц. Так как база данных является реляционной, таблицы связываются с помощью первичных и внешних ключей. Это обеспечивает эффективный способ управления процессом инсталляции и позволяет пользователям с легкостью приспосабливать сложное приложение или даже группу приложений к своим нуждам. Таблицы базы данных отражают общую схему приложения, включающую:
• доступные опции приложения;
• компоненты;
• связи между опциями и компонентами;
• необходимые записи в реестре Windows;
• пользовательский
ПРИМЕЧАНИЕ Справедливости ради надо сказать, что реально инсталлятор обычно использует только порядка 30-35 из них.
Поэтому гораздо проще и удобнее использовать пакеты для создания инсталляторов. К ним относятся, например Visual Studio Installer, Wise Installer, InstallShield Developer и некоторые другие, не столь широко известные пакеты. Кстати, многие пакеты создания инсталляторов включают в базу данных свои дополнительные таблицы, например, в пакетах, созданных с помощью InstallShield Developer количество таблиц достигает 113! При этом никто не запрещает нам, как разработчикам, определять и добавлять свои таблицы, дополняя тем самым модель данных Windows Installer.
ПРИМЕЧАНИЕ Вышесказанное справедливо для Windows Installer версии 2.0, который позволяет распространять и устанавливать приложения для новой перспективной платформы Microsoft -.NET Framework.
Я не буду приводить полный список этих таблиц, так как он займет слишком много места. Вместо этого выделим основные группы таблиц и рассмотрим их подробнее.
В базе данных пакета инсталляции можно выделить семь основных групп:
• базовые таблицы;
• файловые таблицы;
• таблицы записей в реестре Windows;
• системные таблицы;
• таблицы поиска;
• таблицы информации о программе;
• таблицы процесса инсталляции;
Базовые таблицы
Эта группа состоит из таблиц, описывающих основные опции и компоненты приложения и пакета его инсталляции. Эта группа должна заполняться в первую очередь, так как от ее содержимого зависит организация всей остальной части базы данных. Структура этой группы показана на рисунке 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 |
ПРИМЕЧАНИЕ
1. Если в таблице Condition нет условия для функции из таблицы Feature - это значит, что функция будет установлена в любом случае.
2. Один компонент может быть связан с несколькими функциями. В данном случае под термином значительное обновление понимается обновление, приводящее к изменению свойства ProductCode.
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 |
ПРИМЕЧАНИЕ
1. Для получения более подробной информации о привязках смотрите описание функции Windows API BindImageEx
2. В операционных системах Windows95/98 в этой таблице также хранится список изменений в файле autoexec.bat
3. Таблица Icon используется при публикации программных продуктов
4. Таблица MsiFileHash может использоваться только для файлов, не содержащих информации о версиях. Windows Installer может использовать информацию из этой таблицы, чтобы не выполнять лишнее копирование файлов, уже содержащихся на пользовательском компьютере и совпадающих с файлами из пакета инсталляции.
Таблицы записей в реестре Windows
Эта группа содержит таблицы, описывающие различные виды информации в реестре Windows. Структура группы показана на рисунке 3.
Рисунок 3. Структура группы таблиц Записи в реестре Windows.
Внимательный читатель, конечно же, заметил, что на рисунке присутствуют таблицы из других групп, такие, как Component, Feature и File. Эти таблицы включены сюда для того, чтобы более ясно показать логику работы этой группы. Кроме того, здесь присутствуют таблицы, уже упоминавшиеся в других группах, но здесь играющие немного другую роль (это таблицы SelfReg и Environment).