Установщик Windows

Установщик Windows (англ. msiexec.exe, ранее известный как установщик Microsoft, кодовое название Darwin[2]) — программный компонент и интерфейс прикладного программирования (API) для Microsoft Windows, предназначенный для установки, обслуживания и удаления программного обеспечения. Установочные данные и, при необходимости, сами файлы упаковываются в установочные пакеты — слабо структурированные реляционные базы данных в виде COM-хранилищ, обычно называемые «MSI-файлы» по расширению файлов. Пакеты с расширением mst содержат «Сценарии преобразования» установщика Windows, с msm — «Модули объединения», а расширение pcp используется для «Свойств создания исправления». Установщик Windows кардинально отличается от своего предшественника Setup API, добавляя графический интерфейс и автоматическую генерацию последовательности удаления. Он позиционируется как альтернатива автономным исполняемым установочным фреймворкам, например более ранним версиям InstallShield и NSIS.

До появления Microsoft Store (ранее — Windows Store) компания Microsoft поощряла сторонних производителей использовать Установщик Windows как базовую платформу для установки, чтобы обеспечить корректную синхронизацию с другими установщиками и поддержание согласованности внутренней базы данных установленных продуктов. Ключевые функции, такие как откат и управление версиями, зависят от непротиворечивой внутренней базы данных для надёжной работы. Кроме того, Установщик Windows способствует реализации принципа наименьших привилегий, разрешая установку программ через прокси и для непривилегированных пользователей.

Что важно знать
Установщик Windows
Тип установщик
Разработчик Microsoft
Операционная система Windows
Аппаратная платформа Microsoft Windows
Последняя версия 5.0[1] (22 июля 2009)
Лицензия пользовательское соглашение Microsoft
Сайт learn.microsoft.com/ru-r…

История

Установщик Windows был разработан в 1995—1998 годах под кодовым названием Darwin. Первые версии назывались Microsoft Installer, отсюда стандартное расширение установочного пакета — .msi[3].

Первая версия установщика появилась в начале 1999 года для инсталляции Microsoft Office 2000. В том же году Установщик стал частью Windows 2000. Microsoft активно поощряла переход разработчиков на новый вариант, включив в требования к программам, желающим получить знак Windows 2000 Logo, обязательное использование Windows Installer.

Установщик Windows стал значительным шагом вперёд по сравнению с предыдущим установщиком Microsoft — Setup API (ACME Setup): появились поддержка GUI, деинсталляция и откат на любом этапе установки (в том числе при удалении), корректная работа с правами доступа и другие преимущества, что сделало его полноценной альтернативой существовавшим на рынке установочным пакетам.

В будущих обновлениях ожидается появление формата .MSIX, который станет гибридом .APPX и .MSI, что позволит устанавливать приложения UWP вне Microsoft Store.

Логическая структура пакета

Пакет описывает установку одного или нескольких продуктов, идентифицируемых с помощью GUID. Продукт состоит из компонентов, сгруппированных по функциям. Установщик Windows не управляет зависимостями между продуктами.

Продукт

Каждая установленная программа (или набор программ) — продукт. Продукт идентифицируется уникальным GUID (ProductCode), по которому производится идентификация; вместе с номером версии (ProductVersion) проводится управление версиями файлов и разделов реестра.

Пакет включает дополнительную логику и метаданные, управляющие выполнением при запуске. Например, при изменении EXE файла в продукте надо сменить ProductCode или ProductVersion, а при изменениях только метаданных — PackageCode.

Функции

Функция — иерархическая группа компонентов. Она может состоять из любого числа компонентов и субфункций. Небольшие пакеты могут содержать только одну функцию; более сложные программы позволяют пользователю выбрать, что именно установить.

Автор пакета определяет набор функций продукта. Например, текстовый процессор может разделить на разные функции собственно программу, файлы справки, модули проверки правописания и шаблоны.

Компоненты

Компонент — минимальная единица продукта, устанавливаемая исключительно целиком. Компоненты включают программы, папки, COM-объекты, записи реестра, ярлыки. Пользователь напрямую с компонентами не работает.

Компоненты глобально идентифицируются по GUID, что позволяет использовать их в разных функциях или пакетах (например, через модули объединения).

Ключевые пути

Ключевой путь — файл, раздел реестра или источник ODBC, который объявлен критически важным для компонента. Обычно это файл, называемый файлом-ключом. Component может содержать не более одного ключевого пути; если не задан, ключевым считается папка назначения. При запуске MSI-программ установщик проверяет наличие ключевых путей и при несовпадении (например, отсутствует файл-ключ) повторно устанавливает компонент (самовосстановление). Два компонента не могут иметь одинаковый ключевой путь.

Разработка пакетов установщика

Создание MSI-пакета для нового приложения связано с определением размещения файлов, настроек реестра, а также пользовательских действий, часто реализуемых через DLL. Для этого существуют коммерческие и открытые инструменты, включая Visual Studio (до версии 2010 штатно, позже с расширениями), InstallShield и WiX. Пакетирование сопровождается настройкой интерфейса (последовательность диалогов, элементы управления) и поведением установки, в том числе поддержкой «тихой» установки. Готовый пакет «компилируется» в файл .msi.

Пользовательский интерфейс установки настраивается инженером-установщиком. Доступен ограниченный набор элементов управления, из которых формируются диалоговые окна. Пакет может быть настроен для установки без пользовательского интерфейса (автоматический режим).

Проверка ICE

Microsoft предоставляет набор инструментов ICE (internal consistency evaluator) для проверки MSI-пакета на ошибки и несоответствия (файлы CUB с пользовательскими проверками). Проверка осуществляется средствами Orca, msival2 или встроенными в отдельные среды разработки инструментами.

Примеры проверок ICE:

  • ICE09: проверка пометки компонентов, размещаемых в системной папке, как постоянных;
  • ICE24: проверка корректности заполнения кода продукта, версии и языка;
  • ICE33: таблица реестра не должна использоваться для определённых данных, которые должны быть вынесены в отдельные таблицы (класс, расширение, глагол и т. п.).

Устранение ошибок и предупреждений при проверке ICE является обязательным этапом выпуска пакета.

Физическая структура пакета

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

Помимо базы, структура файла .msi допускает хранение пользовательских скриптов и вспомогательных DLL, необходимых для установки, а также компонентов непосредственно в виде архивов .cab. Устанавливаемые файлы могут находиться и вне MSI-пакета — запакованные или нет, с сохранением иерархии папок.

Процесс установки

Процесс установки делится на этапы: сбор информации, выполнение ошибки (откат), и собственно установка.

Действия

Этапы установки состоят из последовательности действий (actions), определённых в базе MSI: для каждого задаётся порядок (номер), а при необходимости — условия выполнения.

Большинство действий — стандартные, но есть возможность добавить пользовательские (custom actions).

Пользовательские действия реализуют через скрипты (JScript, VBScript, Eclipse Script) или DLL (написанные на C, C++ и др.). Скрипты или DLL помещают в msi-файл и извлекают в Windows\Installer с уникальными именами (например, MSIF65E.tmp) при запуске установки.

Сбор информации

На этом этапе Windows Installer собирает команды (от пользователя или программно) по установке или удалению функций, описанных в продукте, и формирует внутренний сценарий для следующего этапа. Этот этап также называется непосредственным режимом (immediate mode).

Выполнение

На данном этапе установщик выполняет сценарий без взаимодействия с пользователем, используя привилегии службы LocalSystem — даже если запуск осуществлён ограниченным пользователем. Этот этап часто называют отложенным режимом (deferred mode).

Откат

Если действие установки завершается ошибкой или пользователь отменяет процесс, все изменения откатываются для возврата системы в исходное состояние. Это обеспечивается наличием «обратных» действий, в том числе для пользовательских сценариев[4].

Версии

Версия Входит в Также доступно для
1.0 Office 2000
1.1 Windows 2000 RTM, SP1, SP2
Office XP
Windows 95, Windows 98
Windows NT 4.0
1.2 Windows Me
2.0 Windows XP RTM, SP1
Windows 2000 с SP3, SP4
Windows Server 2003 RTM
Windows 9x
Windows NT 4.0
Windows 2000
3.0 Windows XP SP2 Windows 2000, по крайней мере, с SP3
Windows XP
Windows Server 2003
3.1 Windows XP SP3
Windows Server 2003 SP1, SP2
Windows XP Professional x64 Edition
Windows 2000, по крайней мере, с SP3
Windows XP
Windows Server 2003
4.0 Windows Vista RTM, SP1
Windows Server 2008 RTM
4.5 Windows Vista SP2
Windows Server 2008 SP2
Windows XP, по крайней мере, с SP2
Windows Server 2003, по крайней мере, с пакетом обновления 1
Windows XP Professional x64 Edition
Windows Vista
Windows Server 2008
5.0 Windows 7 и позднее
Windows Server 2008 R2 и позднее

Прочие возможности

Анонсирование и установка по требованию

Установщик Windows может рекламировать продукт, не устанавливая его полностью[5]. Продукт появляется у пользователя, но реально устанавливается только при первом запуске (например, из меню «Пуск»). Пакет может быть объявлен администратором через групповую политику Windows, иные средства развёртывания или запуском msiexec с ключами /jm (для устройства) либо /ju (для пользователя). Некоторые MSI-пакеты, созданные в InstallShield, могут препятствовать использованию некоторых возможностей MSI.

Пользователь должен обладать правами администратора, чтобы завершить рекламируемую установку.

Установка по требованиям

Как и реклама, установка по требованию позволяет установить функцию в момент первого её использования пользователем[2].

Примечания