Поэтому гораздо проще и удобнее использовать пакеты для создания инсталляторов. К ним относятся, например 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 |