Текст книги "Технология Windows Installer. Часть I. Обзор возможностей"
Автор книги: Андрей Алифанов
Жанр:
Программное обеспечение
сообщить о нарушении
Текущая страница: 2 (всего у книги 3 страниц)
Базовые таблицы
Эта группа состоит из таблиц, описывающих основные опции и компоненты приложения и пакета его инсталляции. Эта группа должна заполняться в первую очередь, так как от ее содержимого зависит организация всей остальной части базы данных. Структура этой группы показана на рисунке 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).
Таким образом, эта группа включает 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 | Эта таблица содержит информацию о записях в реестре, которые нужно удалить при инсталляции приложения |
ПРИМЕЧАНИЕ
1. При публикации приложения никаких записей о библиотеках типов не делается. Запись производится только в момент установки компонента, связанного с библиотекой.
2. Использование саморегистрации в Windows Installer НЕ РЕКОМЕНДУЕТСЯ и включено только для обеспечения обратной совместимости с предыдущими технологиями установки программ. Вместо этого рекомендуется заполнить соответствующие таблицы нужной информацией, аналогичной той, что прописывает нужный модуль при вызове его функции DllRegisterServer.
3. Эта таблица включена в данную группу, так как в операционных системах Windows NT / 2000 / XP данные из нее пишутся в реестр.
СОВЕТ При заполнении этой группы нужно попытаться сделать таблицу 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 | Эта таблица содержит список сигнатур файлов, из которых хотя бы один должен быть установлен на пользовательском компьютере. Таблица используется при обновлении программ |
ПРИМЕЧАНИЕ
1. Формально по документации Microsoft таблица Signature не относится к группе таблиц поиска. Но так как она нигде, кроме поиска, не используется, я позволил себе внести ее в эту группу.
Таблицы информации о программе
Таблицы этой группы содержат важную информацию о пакете инсталляции, используемую на протяжении всего процесса инсталляции.
Состоит эта группа из пяти таблиц:
Property | В этой таблице хранятся все свойства 1 пакета инсталляции |
Binary | В этой таблице хранятся двоичные данные для иконок, растров и т.п. Также здесь хранятся данные для пользовательских операций |
Error | Эта таблица используется для поиска шаблонов форматирования при обработке ошибок. Installer имеет свой собственный механизм обработки ошибок |
Shortcut | Здесь хранится вся информация, необходимая для создания файловых ярлыков |
ReserveCost | Эта таблица содержит информацию о необходимом дисковом пространстве для каждого компонента приложения |
ПРИМЕЧАНИЕ
1. Свойство – это глобальная переменная, которая используется Microsoft Windows Installer во время инсталляции.
Таблицы процесса инсталляции
Таблицы этой группы управляют выполнением стандартных и пользовательских операций.
ПРИМЕЧАНИЕ Тема операций в Windows Installer обширна и ей будет посвящена одна из следующих статей.
Некоторые из таблиц этой группы управляют последовательностью выполнения операций на самом высоком уровне. Каждая из следующих таблиц управляет своей частью процесса.
InstallUISequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции INSTALL и уровне пользовательского интерфейса – полный или сокращенный. Installer пропускает операции из этой таблицы, если уровень пользовательского интерфейса установлен в базовый или отключен1 |
InstallExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции INSTALL1, 2 |
AdminUISequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADMIN и уровне пользовательского интерфейса – полный или сокращенный. Installer пропускает операции из этой таблицы, если уровень пользовательского интерфейса установлен в базовый или отключен3 |
AdminExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADMIN2, 3 |
AdvtUISequence | Installer не использует эту таблицу. Она должна быть удалена из базы данных или быть пустой |
AdvtExecuteSequence | Эта таблица содержит операции, выполняемые при активизации высокоуровневой операции ADVERTISE4 |
ПРИМЕЧАНИЕ
1. Все операции в последовательности инсталляции, вплоть до InstallValidate и диалогов выхода, помещаются в таблицу InstallUISequence. Все операции от InstallValidate и до конца инсталляции – в таблицу InstallExecuteSequence. Так как последняя таблица может использоваться независимо от первой (например, если пользовательский интерфейс отключен), она включает все операции инициализации, такие как LaunchConditions, CostInitialize, CostFinalize и ExecuteAction.
2. Все пользовательские операции, выполняемые в этой последовательности, при необходимости использования пользовательского интерфейса должны пользоваться функцией API MsiProcessMessage, вместо диалогов из таблицы Dialog.
3. Все операции в последовательности инсталляции, вплоть до InstallValidate и диалогов выхода, помещаются в таблицу AdminUISequence. Все операции от InstallValidate и до конца инсталляции – в таблицу AdminExecuteSequence. Так как последняя таблица может использоваться независимо от первой (например, если пользовательский интерфейс отключен), она включает все операции инициализации, такие как LaunchConditions, CostInitialize, CostFinalize и ExecuteAction.
4. Таблица AdvtExecuteSequence может содержать только ограниченный набор стандартных операций. Пользовательские операции не должны содержаться в этой таблице.
К другой группе относятся таблицы, позволяющие расширять функциональность пакета инсталляции. Достаточно часто, особенно при установке сложных программных продуктов, встроенной функциональности Windows Installer, основанной на стандартных операциях, не хватает. Здесь и приходит на помощь таблица Custom Action, позволяющая создавать и хранить в инсталляционной базе данных информацию для выполнения пользовательских операций.
Эта таблица позволяет легко и просто интегрировать пользовательский код и данные в процесс инсталляции приложения. Исполняемый код может браться прямо из базы данных, только что установленного файла или из уже существующего на компьютере исполняемого файла.
Следующая группа таблиц расширяет возможности инсталлятора по манипулированию файлами и каталогами в процессе инсталляции.
RemoveFile | Эта таблица содержит список файлов, которые необходимо удалить при инсталляции |
RemoveIniFile | Эта таблица содержит информацию, которую нужно удалить из .ini-файлов при инсталляции приложения |
RemoveRegistry | Эта таблица содержит информацию, которую нужно удалить из реестра при инсталляции связанного с ней компонента |
CreateFolder | Содержит список каталогов, которые необходимо создать при инсталляции приложения 1 |
MoveFile | Эта таблица содержит список файлов, которые нужно перенести или скопировать во время инсталляции из исходного каталога в заданный каталог |
ПРИМЕЧАНИЕ
1. Хотя Installer и создает при инсталляции каталоги по мере необходимости, они удаляются, если не содержат файлов. Каталоги, перечисленные в таблице CreateFolder, не удаляются до тех пор, пока не будет удален связанный с ними компонент.
И, наконец, последняя в списке, но далеко не последняя по значимости таблица, управляющая выполнением инсталляции: LaunchCondition. Эта таблица содержит список условий, при выполнении которых может начаться процесс инсталляции. Следует заметить, что эта таблица управляет процессом в целом и для успешного запуска процесса инсталляции необходимо выполнение ВСЕХ содержащихся в ней условий.
Последнее слово о таблицах
Список таблиц, используемых Windows Installer, весьма велик. И вполне естественно, что в рамках статьи невозможно рассмотреть все из них. Многие из таблиц, не упоминавшихся здесь, будут рассмотрены в следующих статьях, при рассмотрении более узких тем.
Windows Installer API
Таблицы – это конечно, хорошо. Но как добраться до содержимого этих таблиц? И как изменять эти таблицы? То есть, говоря иными словами, как можно работать с базой данных инсталляционного пакета?
Для этого существует 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 поддерживаются следующие типы записей: String – строка, заканчивающаяся нулем, Integer – 32-битное целое число и Stream – поток байтов произвольной длины.
• Функции для работы c суммарной информацией – эта группа функций позволяет извлекать из базы и записывать в базу свойства суммарной информации.
• Функции доступа к состоянию инсталлятора – эти функции позволяют получать и задавать различные свойства инсталлятора.
• Функции выполнения операций – эта группа функций используется для выполнения пользовательских и стандартных операций, вычисления условий и обработки сообщений.
• Функции поиска – эти функции позволяют получать и записывать информацию в таблице Directory.
• Функции выбора – эта группа функций используется для работы с функциями приложения и компонентами.Также в нее входят функции для установки уровня инсталляции и оценки места на диске, необходимого как для установки отдельных компонентов приложения, так и для всего продукта в целом
• Функции пользовательского интерфейса – эти функции используются в инструментальных средствах для предварительного просмотра диалоговых окон и различных