Инсталляторы MSI

Windows Installer изначально входит в состав операционных систем семейства Windows .NET Server 2003, Windows XP, Windows 2000 и Windows Me; для операционных систем Windows NT 4.0, Windows 98 и Windows 95 он должен устанавливаться дополнительно (либо, как было сказано выше, при инсталляции какого-либо приложения, либо в виде отдельного пакета обновления).

В русскоязычной версии Windows служба Windows Installer именуется Установщик Windows. Следует понимать, что речь идет не о программе, «которая устанавливает Windows», а о программе, которая обеспечивает «установку для Windows».

Еще раз повторим, что по настоятельной рекомендации Microsoft все современные дистрибутивы «солидных» приложений должны создаваться на основе технологии MSI - так называемые инсталляторы MSI.

При ее использовании большая часть задач по развертыванию приложения возлагается не на программу-инсталлятор, а на службу Windows Installer. Именно поэтому Многие компании-разработчики включают в состав дистрибутивов своих приложений еще и установочные файлы службы Windows Installer: если таковая на компьютере пользователя отсутствует, инсталляции приложения предшествует установка Windows Installer.

Хотя эта процедура запускается автоматически, полезно знать, что дистрибутив может содержать два ехе-файла для установки Windows Installer:

  • INSTMSI.EXE - стандартный инсталлятор;
  • INSTMSIW.EXE - инсталлятор с поддержкой кодировки Unicode (то есть с поддержкой расширенного набора символов для обеспечения многоязычности).

Так что, увидев в составе дистрибутива два этих файла, не пугайтесь: это не вирусы и не программы-шпионы (хотя... кто знает, чем занимается Windows Installer помимо инсталляции).

Windows Installer позволяет выполнять следующие задачи:

  • восстановление состояния компьютера после сбоя установка - Windows Installer продолжает записывать все изменения в системе во время установки приложения; в случае сбоя установки он может восстановить или вернуть систему в исходное состояние;
  • предотвращение определенных форм конфликта между приложениями - Windows Installer назначает правила установки, которые помогают, предотвратить конфликты с общими ресурсами в существующих приложениях; такие конфликты могут возникать при попытке программы установки обновить или удалить общие с существующим приложением библиотеки динамической компоновки (.dll);
  • надежное удаление существующих программ - Windows Installer может надежно удалить любую ранее установленную им программу; удаляются все связанные с ней записи реестра и файлы, кроме тех, которые являются общими с другим программным обеспечением;
  • диагностика и восстановление поврежденных приложений для проверки наличия в установленных приложениях поврежденных файлов. или отсутствия файлов эти приложения могут послать запрос к Windows Installer, если такие файлы будут найдены, Windows Installer восстановит приложение, скопировав только отсутствующие или поврежденные;
  • установка компонентов приложения по требованию (install on demand) - Windows Installer можно настроить на исходную установку минимального набора возможностей приложения; в дальнейшем дополнительные компоненты могут быть автоматически установлены при попытке пользователя получить доступ к возможностям приложения, для которых эти компоненты необходимы; возможность называют объявлением (advertisement), например Windows Installer может установить Microsoft Excel без поддержки средств аналитической обработки данных - при первой попытке доступа пользователя к функции анализа (не включенной в исходную установку) Windows Installer автоматически установит соответствующий компонент; точно так же Windows Installer удаляет компоненты, не используемые в приложении, например Можно настроить Windows Installer на удаление компонента анализа данных, если он не будет использоваться более 30 дней;
  • автоматическая установка приложений - пакеты установки можно настроить так, чтобы не прерывать процесс установки по требованию пользователя; во время процесса установки Windows Installer может запросить атрибуты Рабочего стола;
  • поддержка 32-разрядных и 64-разрядных приложений - допускается установка 32-разрядных приложений на 64-разрядные компьютеры;
  • поддержка технологии Microsoft .NET Framework;
  • интеграция с сосуществованием компонентов - исключает конфликты версий библиотек .dll, позволяя привязывать приложение к версии компонента, с которой оно было разработано и протестировано, вне зависимости от компьютера, на котором размещается приложение; сосуществование компонентов поддерживает одновременное выполнение нескольких версий каждого компонента;
  • возможность настройки параметров программного обеспечения разработчиками.

Технология .NET Framework позволяет разрабатывать приложения, которые, будучи однажды написанными и скомпилированными, могут выполняться в любой среде. Архитектура .NET разделяет компоненты приложений. В результате приложение всегда загружает компоненты, с которыми оно было разработано и протестировано. Если приложение выполняется после установки, оно будет выполняться всегда. Исключается неверная работа приложений, вызванная заменой первоначальных библиотек .dll на файлы .dll, разработанные для более поздних версий. Технология работы Windows Installer базируется на использовании трех основных файлов:

  • файла пакета установи (в формате MSI), входящего в дистрибутив приложения;
  • файла программы установщика - Msiexec.exe; эта программа выполняет все задачи, связанные с установкой: копирует файлы на жесткий диск, вносит изменения в реестр, создает ярлыки на Рабочем столе и выводит диалоговые окна для запроса пользовательских предпочтений; Msiexec.exe можно запустить в режиме командной строки, указав необходимые дополнительные параметры;
  • файла библиотеки динамической компоновки Msi.dll, содержащего функции для чтения файлов пакетов (MSI), применения преобразований и выполнения некоторых других действий.

Файлы Msiexec.exe и Msi.dll входят в состав систему и находятся в папке %SystemRoot%\SYSTEM32 (для Windows 2000/ХР) или %SyetemRoot%\SYSTEM (для Windows 98) на жестком диске компьютера (если Windows Installer установлен).

По двойному щелчку файла с расширением MSI операционная система запускает программу Msiexec.exe. Тот же результат можно получить, выбрав в контекстном меню MSI-файла команду Установка,

Существуют MSI-дистрибутивы, состоящие только из одного MSI-файла. Чтобы начать установку такого приложения, следует щелкнуть правой кнопкой мыши значок MSI-файл и выбрать в его контекстном меню команду Установка (можно также выбрать соответствующий MSI-файл с помощью компонента Установка и удаление программ).

Каждый файл пакета (MSI) содержит базу данных реляционного типа, в которой хранятся все инструкции и данные, необходимые для установки (или удаления) программы различными способами. Например, файл пакета может содержать инструкции по установке приложения, предыдущая версия которого уже установлена.

Реляционная база данных - это база данных, состоящая из нескольких взаимосвязанных таблиц. Соответственно, MSI-файл содержит набор таблиц, описывающих доступные возможности, компоненты, отношения между возможностями и компонентами приложения, а также необходимые параметры реестра.

Поскольку база данных является реляционной, изменения, внесенные в одну таблицу, автоматически распространяются на всю базу. Это упрощает процесс настройки больших приложений или групп приложений.

Помимо MSI-файла в состав дистрибутива могут входить файлы еще нескольких типов, влияющих на работу Windows Installer. Наиболее важными среди них можно считать файлы преобразования (с расширением MST). Содержащиеся в них сведения применяются к установочной базе данных и изменяют ее элементы. Например, Windows Installer может использовать файл преобразования для смены языка интерфейса пользователя приложения. Файлы преобразования изменяют MSI-файл пакета установки во время установки и, следовательно, могут динамически влиять на процесс установки. Эти преобразования применяются к файлу базового пакета каждый раз, когда требуется изменить конфигурацию приложения, заданную в пакете установки. Преобразования применяются в ходе начальной установки и не влияют на уже установленные приложения.