Материал из РУВИКИ — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 29 сентября 2018 года; проверки требуют 22 правки.
Установщик Windows | ||
---|---|---|
|
||
Тип | компонент Microsoft Windows[d] и Инсталлятор | |
Разработчик | Microsoft | |
Операционная система | Windows | |
Аппаратная платформа | Microsoft Windows | |
Последняя версия | 5.0[1] (22 июля 2009 года) | |
|
||
Лицензия | Пользовательское соглашение Microsoft | |
Сайт | docs.microsoft.com/… (англ.) |
Windows Installer (установщик Windows, кодовое имя — Darwin[2][3]) — подсистема Microsoft Windows, обеспечивающая установку программ (инсталлятор). Является компонентом Windows, начиная с Windows 2000; может доустанавливаться и на более ранние версии Windows. Вся необходимая для установки информация (иногда и вместе с устанавливаемыми файлами) содержится в установочных пакетах (installation packages), имеющих расширение .msi[4].
Windows Installer был разработан в 1995—1998 годах и имел вначале кодовое название Darwin. Ранние версии назывались Microsoft Installer, отсюда стандартное расширение файла инсталляционного пакета — .msi.[5]
Первая версия Installer’а вышла в начале 1999 в качестве инсталлятора Microsoft Office 2000. В конце того же года Installer стал частью Windows 2000. Майкрософт всячески поощрял переход разработчиков на новый инсталлятор, включив в список требований к программам, желающим получить так называемый знак Windows 2000 Logo, требование устанавливаться с помощью Windows Installer.
Windows Installer оказался значительным шагом вперёд по отношению к предыдущему инсталлятору Microsoft — Setup API (ACME Setup): в нём были введены возможности GUI, поддержка деинсталляции и отката в любой момент установки (включая откат во время деинсталляции), корректная работа с правами доступа в Windows и другие возможности, что сделало его сильной альтернативой различным существовавшим на рынке инсталляционным пакетам.
В будущих обновлениях будет представлен .MSIX, который станет своеобразным гибридом .APPX и .MSI, позволяющий инсталлировать UWP приложения в систему (Сейчас же это возможно только непосредственно через Microsoft Store)
Инсталляционный пакет описывает установку одного продукта и имеет свой GUID. Продукт состоит из компонентов (components) (тоже имеющих свои GUIDы), сгруппированных в возможности (features).
Компонент (component) — минимальная неделимая установочная единица, представляющая собой группу файлов, значений реестра, создаваемых папок и других элементов, объединённых общим именем (именем компоненты) и либо устанавливаемых вместе, либо не устанавливаемых. Компоненты скрыты от конечного пользователя. Каждая компонента имеет ключевой путь (key path) — например, имя своего главного файла — по которому определяется наличие этой компоненты на компьютере пользователя.
Возможность (feature; в русифицированной версии Windows именно это слово переводится как «компонента», что вносит путаницу) — это иерархическая группа компонент и/или других возможностей. Когда при установке показывается диалог выбора устанавливаемых частей программы, пользователь управляет выбором именно возможностей. Выбор возможности для установки влечёт за собой установку всех компонентов, которые в неё включены[6].
Файл .msi представляет собой составной документ OLE (OLE compound document — в том же формате-контейнере хранятся документы Microsoft Word, Excel и т. д.), в котором содержится небольшая реляционная база данных — набор из нескольких десятков взаимосвязанных таблиц, содержащих различную информацию о продукте и процессе установки. При этом все строковые данные в базе хранятся вместе в отдельном потоке документа, а в таблицах базы на них имеются ссылки; таким образом избегают дублирования строк, что значительно уменьшает размер базы.
Кроме базы, структура файла .msi предусматривает помещение туда пользовательских сценариев и вспомогательных DLL, если таковые требуются для установки, а также самих устанавливаемых файлов, запакованных в формате .cab. Файлы можно размещать и отдельно от пакета, в запакованном или распакованном виде (с сохранением структуры каталогов).
Процесс установки состоит из нескольких этапов — сбора информации, выполнения (собственно установки), а также, возможно, отката (в случае ошибки или отмены установки пользователем).
Действия[править | править код]
Каждый этап установки состоит из последовательности действий (actions), записанной в базе данных. Действиям присвоены номера, определяющие порядок их выполнения, а иногда — и условия, при которых действия выполняются или не выполняются.
Большая часть действий — это стандартные действия, характерные для типичного процесса сбора информации и установки. Все эти действия документированы, кроме них, пользователь может определить и свои действия (custom actions).
Действия, определённые пользователем, могут быть либо написаны на одном из скриптовых языков, встроенных в операционную систему (JScript или VBScript так же и Eclipse, побочный язык от C++), либо размещаться в специально созданной DLL (написанной на таких языках, как C, C++ и т. д.). Файлы с этими действиями помещаются внутрь файла .msi и извлекаются оттуда в начале запуска установки. Эти DLL извлекаются в каталог Windows\Installer, при этом им присваиваются случайные имена, например MSIF65E.tmp.
Сбор информации[править | править код]
На этапе сбора информации Windows Installer собирает инструкции (либо путём взаимодействия с пользователем, либо программным путём) установить или удалить одну или несколько возможностей, входящих в продукт. Эти инструкции в дальнейшем формируют на основе базы данных внутренний сценарий, детально описывающий последующий этап выполнения.
Этот этап называют также непосредственным режимом (immediate mode).
Выполнение[править | править код]
К началу этого этапа инсталлятор генерирует внутренний сценарий, предназначенный для выполнения без вмешательства пользователя. Этот сценарий выполняется инсталлятором в привилегированном режиме службы NT (конкретно — под аккаунтом LocalSystem). Привилегированный режим требуется из-за того, что инсталляция могла быть запущена пользователем, не обладающим необходимыми правами для изменения системных параметров и файлов (хотя право установить программу ему было предоставлено).
Этот этап иногда называется отложенным режимом (deferred mode).
Откат[править | править код]
Если какое-либо из действий, определённых в сценарии, оканчивается неудачей, или установка в процессе отменяется пользователем, все действия, выполненные до этого места, откатываются, возвращая систему в состояние, бывшее до установки. Откат обеспечивается наличием для каждого действия, вносящего изменение в систему, обратного к нему. Вводя в пакет нестандартные действия, программист также должен создать обратные к ним для правильной работы отката[7].
Анонсирование и установка по требованию[править | править код]
Установщик Windows может рекламировать продукт, а не устанавливать его[8]. Продукт появится у пользователя, но он фактически не будет установлен до тех пор, пока он не будет запущен в первый раз (с помощью ярлыка в меню «Пуск»). Установочный пакет может быть объявлен администратором с использованием групповой политики Windows, или другого механизма компилирования, или путём запуска исполняемого файла msiexec с помощью /jm (для рекламы для каждого устройства), или /ju (для рекламы для каждого пользователя). Некоторые пакеты MSI, созданные в InstallShield, могут помешать использованию этих, и других встроенных функций MSI.
Пользователь должен иметь права администратора, чтобы завершить рекламируемую установку.
Установка по требованиям[править | править код]
Подобно рекламированию продукта, установка по требованиям устанавливает функцию, как только пользователь пытается её использовать[9].
- ↑ Released Versions of Windows Installer. Microsoft Developer Network. Microsoft. Дата обращения: 22 февраля 2015. Архивировано 13 декабря 2014 года.
- ↑ when setup isn’t just xcopy : The story of Orca. Архивировано 23 декабря 2008 года.
- ↑ Windows Installer, The .NET Framework, The Bootstrapper, and You – Chris Smith’s completely unique view. Дата обращения: 1 июля 2018. Архивировано 5 февраля 2019 года.
- ↑ File Extension .MSI Details. Дата обращения: 1 июля 2018. Архивировано 11 августа 2021 года.
- ↑ Rob Mensching. Inside the MSI file format. Дата обращения: 11 апреля 2006. Архивировано 15 января 2009 года.
- ↑ Windows Installer Components | Microsoft Docs. Дата обращения: 1 июля 2018. Архивировано 1 июля 2018 года.
- ↑ Rollback Installation | Microsoft Docs. Дата обращения: 1 июля 2018. Архивировано 1 июля 2018 года.
- ↑ Advertisement | Microsoft Docs. Дата обращения: 1 июля 2018. Архивировано 1 июля 2018 года.
- ↑ Installation-On-Demand | Microsoft Docs. Дата обращения: 1 июля 2018. Архивировано 1 июля 2018 года.
- Раздел Установщик Windows (англ.) MSDN
Время на прочтение7 мин
Количество просмотров55K
Технология Windows Installer (MSI) является стандартом де-факто в мире системных администраторов, занимающихся распространением и поддержкой программного обеспечения для десктопных и серверных версий Windows. Формат MSI поддерживается всеми крупнейшими системами управления конфигурациями (Microsoft SCCM, CA Unicenter и многими другими), а для некоторых систем распространения ПО — является единственным поддерживаемым форматом.
Мой опыт работы с этой технологией — как теоретический, так и практический — приобретен за время работы в компании «Инфопульс Украина» и связан с созданием MSI-пакетов и подготовкой готовых MSI-пакетов к автоматической установке в корпоративной среде.
Зачем это вам?
Если вы занимаетесь централизованной установкой приложений в сетях Windows, знание формата MSI и умение создавать и редактировать пакеты в этом формате вам может здорово пригодиться при подготовке пакета к развертыванию и диагностике проблем. В Европе и США технология Windows Installer востребована многими крупными заказчиками, поэтому знание MSI может быть плюсом для системного администратора при трудоустройстве.
Что нужно знать и уметь перед началом изучения?
Ничего сложного. Если у вас есть опыт администрирования и поддержки небольшой (а лучше большой, иерархической) сети Windows-машин, вероятнее всего вы уже сталкивались с основными вопросами и понятиями, которые вам понадобятся. Перед тем, как начать, убедитесь, что вы хорошо понимаете структуру файловой системы Windows, структуру профиля пользователя и структуру реестра, знаете что такое процессы и службы в Windows, умеете управлять учетными записями пользователей и знаете где находятся журналы событий. Для того, чтобы научиться создавать пакеты MSI, вам совсем необязательно иметь опыт разработчика, хотя конечно лучше если такой опыт у вас есть. И совсем не обязательно уметь писать запросы на SQL, хотя это тоже может пригодиться (ведь каждый MSI-файл — это небольшая реляционная база данных). Но обязательно нужно уметь читать и понимать техническую документацию на английском, без этого скорее всего ничего не получится. При изучении теории (и при создании пакетов на практике) постарайтесь хотя бы на первых порах строго следовать стандартам Windows Installer, избегая вспомогательных утилит типа InstallShield/InstallScript, так вы лучше поймёте как правильно создать MSI-пакет.
Готовим песочницу и начинаем практику
Начать нужно с установки и настройки виртуальной машины. В процессе обучения вам придется немало поэкспериментировать, поэтому лучше сделать это в песочнице. Если нужны бесплатные продукты — устанавливаем VirtualBox или VMWare Player (для профессиональных задач их функционала может быть недостаточно, но для обучения — вполне подойдет). В виртуальной машине, естественно, нужно установить Windows на ваш выбор (XP и выше).
Если у вас уже есть опыт работы с утилитами от Sysinternals — прекрасно. Если нет — самое время восполнить пробел. Нам понадобятся минимум две: для отслеживания файловой и реестровой активности приложения при установке или во время его работы — Process Monitor, для запуска инсталляции от имени учетной записи LocalSystem — PsExec. Попрактикуйтесь использовать эти утилиты на простом приложении типа notepad (с какими ресурсами работает notepad при открытии файла, при сохранении файла; запустите notepad от имени пользователя LocalSystem, поэкспериментируйте с сохранением файлов и установкой файловых ассоциаций), в дальнейшем эти навыки пригодятся.
Установите Panda QuickShot или другой софт для сравнения состояний системы. Разберитесь с основным функционалом, научитесь отслеживать файловые и реестровые изменения в системе при установке нового приложения или изменении параметров системы (самое простое — зарегистрируйте новую файловую ассоциацию для notepad, измените обои рабочего стола и отследите где хранятся эти настройки). Подойдите к этому творчески, поле для экспериментов обширное.
Скачайте MSI-инсталлятор какого-нибудь несложного приложения (например, Orca, InstEd или Firefox). Установите пакет на виртуальной машине, с помощью описанных выше утилит изучите устанавливаемые им ресурсы. Научитесь пользоваться командной строкой Windows Installer (msiexec /?), поэкспериментируйте с различными опциями установки и сравните результат. Выполните удаление приложения из командной строки, установите пакет в автоматическом (silent) режиме.
Установите InstEd или Orca на хост-машине. Откройте MSI-пакет, который вы устанавливали на виртуальной машине, с помощью одной из этих утилит. Сравните записи основных таблиц в MSI-пакете (File, Directory, Registry) с ресурсами (файлы, папки, ключи реестра), установленными этим пакетом на вашей виртуальной машине (результат сравнения снимков состояний с помощью Panda QuickShot).
Немного теории
Теперь самое время взяться за теорию. Не буду дублировать официальную документацию и отдельные полезные статьи по ссылкам ниже, просто попробую перечислить вещи, с которыми нужно разобраться для начала:
- Таблица Property, код продукта (ProductCode), код пакета (PackageCode), стандартные свойства в MSI;
- Таблица Upgrade и код обновления (UpgradeCode);
- Таблицы Feature, Component и их назначение;
- Таблицы Directory, File, Registry, Shortcut;
- Способы хранения файлов приложения, поставляемых с MSI-пакетом, таблица Media;
- Трансформы, их создание и применение из командной строки.
Прочтение документации по указанным темам подкрепляйте экспериментами на готовых пакетах, а со временем можно попробовать сделать пакет самому. Этих знаний вам будет достаточно для внесения небольших изменений в MSI-пакеты при подготовке к развертыванию в корпоративной среде (типовые задачи — задание свойств пакета, правка реестра, удаление файлов и ярлыков, отключение кнопки Remove для приложения в Add/Remove Programs). Только не забывайте после внесения любых правок в пакет выполнять тщательное тестирование перед запуском пакета в промышленную эксплуатацию. При тестировании обязательно используйте рекомендации, приведенные в этой статье.
Думаю, на этом пока можно закончить вводную часть. В дальнейшем (если будет интерес) я попробую рассказать об особенностях некоторых готовых MSI-пакетов, предоставляемых производителями ПО для развертывания в корпоративной среде и рассмотреть другие интересующие системных администраторов вопросы.
Пожелания, замечания, а также предложения по темам для следующих статей приветствуются.
Обзор утилит и документации
Бесплатно можно использовать простые редакторы MSI-файлов с ограниченным функционалом — здесь упоминания заслуживают классическая Orca от Microsoft и довольно удобный InstEd. Эти редакторы позволяют вносить небольшие изменения в готовые MSI-файлы, создавать и применять трансформы, но создавать в них MSI-пакеты с нуля довольно непросто (а для больших пакетов — и вовсе не имеет смысла). Но если вы действительно хотите изучить технологию MSI, вам просто необходимо собрать пару простых пакетов в InstEd или Orca и выполнить их валидацию на соответствие стандарту Windows Installer.
Специализированные утилиты для выполнения setup capture (создания или конвертирования установочных пакетов из так называемых «старых форматов»» в формат MSI с использованием сравнения «снимков» системы до и после установки приложения или мониторинга изменений в системе «на лету») — бесплатный AppDeploy Repackager, или более серьезный MSI Generator. MSI-пакетам, созданным с использованием этих утилит, может потребоваться некоторая доработка, которую можно выполнить с помощью редактора MSI.
Серьёзные полнофункциональные (и весьма дорогие) IDE, обеспечивающие поддержку полного цикла работ с MSI-пакетами — если вы будете заниматься технологией MSI профессионально, вам скорее всего не обойтись без этих программ. В этом сегменте до недавнего времени доминировали два продукта — AdminStudio от Flexera и Wise Package Studio от Symantec, но недавно Symantec объявил о прекращении работ по развитию Wise Package Studio, и рынок переходит в руки Flexera. Кроме работы с MSI, AdminStudio позволяет работать с виртуальными пакетами форматов Microsoft App-V, VMware Thin App и Citrix XenApp. Для ознакомительных целей доступна пробная 21-дневная версия.
Отдельно стоит упомянуть WIX (Windows Installer XML) — набор утилит для создания MSI-файлов из XML-описаний. Этот проект был выпущен «Майкрософтом» под открытой лицензией Common Public License, поддерживает интерфейс командной строки и может использоваться для автоматизации создания версий инсталляционных пакетов. Хорошее описание есть на Хабре.
Полезные ресурсы:
Статьи по Windows Installer на RSDN: раз, два. Хороши тем, что описывают основные концепции и понятия MSI на русском языке и в довольно читабельной форме. Статьи немного устарели (описывают стандарт 2.0), но актуальности не потеряли. Важно понимать, что только этих статей для изучения MSI недостаточно — нужно много читать MSDN и много практиковаться.
Статьи на MSDN — самый полный источник информации, которая понадобится в процессе изучения и дальнейшей работы. Присутствуют пошаговые упражнения для практики по созданию MSI-пакетов с нуля.
AppDeploy.com — общедоступная база знаний по приложениям, часто можно найти особенности установки или настройки готовых пакетов, выпускаемых крупными вендорами (Adobe, Microsoft), командные строки для автоматизации установки и другие полезные вещи.
Для удобства продублирую ссылки на программы из текста одним списком:
- Виртуальные машины: VirtualBox или VMWare Player.
- Утилиты Sysinternals: Process Monitor, PsExec, полный список утилит с описаниями.
- Программы для редактирования MSI-файлов: InstEd, Orca (нужно устанавливать как часть Windows 7 SDK).
- Программы для создания MSI-файлов: AppDeploy Repackager, MSI Generator, AdminStudio (пробная версия).
Процесс установки Windows на компьютер выглядит почти одинаково вот уже более десяти лет — со времён Windows 8. Но в свежей сборке Windows 11 для инсайдеров на канале Canary установочный интерфейс получил радикально преображённый внешний вид; отмечено и множество других изменений, сообщает XDA Developers.
Источник изображений: xda-developers.com
Новый экран установки дебютировал в сборке Windows 11 26040 — на смену окну с фиолетовым фоном пришло окно белого цвета, где пользователю предлагают выбор: исправить Windows 11 или полностью переустановить систему, подтвердив, что при установке все данные с компьютера удалятся. Рамки окна остались прежними.
Ещё одно нововведение в этой сборке операционной системы — функция Voice Clarity, которая помогает улучшить качество голоса пользователя при видеовызовах и вообще в любых приложениях для связи. При помощи ИИ-алгоритмов подавляются шум и эхо, но в поддерживаемых приложениях может быть предусмотрена возможность отключить эту функцию, если через микрофон будет звучать музыка или что-то другое. Ранее Voice Clarity была доступна на устройствах Surface, но теперь её можно включить на любом ноутбуке.
Улучшилась работа функции Narrator («Экранный диктор»): усовершенствовано распознавание текста на изображениях, появилась поддержка чтения документов, комментариев, закладок и предложений в Word. Можно одновременно пользоваться экранным диктором и голосовым управлением; кроме того, можно отдать Narrator команду «говори быстрее».
Появился ряд новых функций в системе Windows LAPS (Local Administrator Password Solution): автоматическое управление учётными записями; возможность отключать некоторые символы, которые могут вызывать проблемы с читаемостью длинных паролей, например, «1» и «I»; поле с отображением пароля стало более читаемым. Опция парольной фразы позволяет создавать длинные пароли из реальных слов; можно выбирать максимальную длину пароля в словах и символах по своему усмотрению. Наконец, LAPS поможет разобраться, если локальный пароль перестал соответствовать паролю в Active Directory.
Появилась поддержка быстрых устройств с интерфейсом USB4 2.0 (до 80 Гбит/с); из комплекта системы исчез WordPad; обновился значок диспетчера задач; появились новые параметры сжатия файлов при архивировании — можно выбрать уровень сжатия и формат архива; нажатие кнопки «Поделиться» в браузере вызывает системное окно с возможностью публикации напрямую в соцсети, а при наличии Microsoft Entra ID можно поделиться чем-нибудь в Teams. Оптимизирована функция Nearby Share — передача файлов в локальной сети теперь будет происходить быстрее.
Если вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Устройство и развертывание пакетных файлов
Какому администратору Windows не знакомы символы msi? Служба Windows Installer (программа msiexec.exe) и ее пакетный файл .msi — фактически стандартная технология для установки приложений Windows. Преимущества пакета установки приложений Windows Installer общеизвестны. Во-первых, при сбоях в процессе установки пакет .msi отменяет выполненный фрагмент установки и восстанавливает исходное состояние компьютера, тем самым предотвращая повреждения приложений и системы. Во-вторых, .msi-упакованное приложение обладает способностью к самовосстановлению, если пользователь удаляет один из его файлов. И наконец, Windows Installer обеспечивает установку программ на пользовательских компьютерах. Основные принципы работы Windows Installer широко известны, но более глубокое понимание внутренних механизмов Windows Installer и пакетов .msi позволит строить специализированные пакеты установки приложений и упростит диагностику сбоев в процессе развертывания. Ниже приводится обзор технологии Windows Installer, а затем речь пойдет о структуре пакетов .msi и их взаимодействии со службой Windows Installer.
Технология Windows Installer
Технология Windows Installer была разработана около четырех лет назад, а позднее стала базовым компонентом операционной системы Windows 2000 Server. Windows Installer 2.0 входит в состав Windows Server 2003 и Windows XP и поддерживает сборки Microsoft .NET (блок установки в .NET). Пользователи могут получить Windows Installer либо вместе с операционной системой Windows в качестве службы Windows Installer, либо в составе комплекта разработки программ (software development kit, SDK). Служба Windows Installer представляет собой механизм, который устанавливает пакеты Windows Installer (.msi-файлы). SDK содержит спецификации и API, определяющие формат и функцию .msi-файлов. Windows Installer SDK представляет собой составную часть Platform SDK. Его можно загрузить по адресу http://www.microsoft.com/msdownload/platformsdk/ sdkupdate/sdkinfo.htm. Разработчики и поставщики инструментов упаковки программ, такие как InstallShield Software, OnDemand Software и Wise Solutions (в настоящее время подразделение компании Altiris), применяют SDK для подготовки пакетов установки приложений. Программисты часто используют инструменты упаковки приложений, которые преобразуют старые процедуры установки в формат Windows Installer, чтобы скрыть от пользователей сложность технологии Windows Installer.
Продукты, функции и компоненты
.msi-файл представляет собой сложную базу инструкций по установке приложений, которая содержит десятки таблиц, сотни столбцов и иногда вложенные файлы. В базе данных хранится информация о требованиях операционной системы к установке приложения, этапах установки и даже диалоговых окнах, выводимых на экран.
.msi-файл имеет трехуровневую структуру. Высший уровень — продукт, собственно приложение. Продукту присваивается уникальный код — глобально уникальный идентификатор (globally unique identifier, GUID). На следующем уровне располагаются функциональные блоки внутри продукта. Функциональные блоки имеют имена и могут быть добавлены по желанию пользователя. На экране 1 показан пример функциональных блоков в приложении — в данном случае Microsoft Office Access и Microsoft Office Excel в пакете установки Microsoft Office. Функциональный блок — это единый блок для установки внутри пакета Windows Installer. Устанавливаются (или удаляются) функциональные блоки пакета, а не отдельные файлы.
Экран 1. Функциональные блоки приложения, упакованного для Windows Installer |
На экране 1 видно, что Excel состоит из множества функциональных подблоков, таких как Help и Spreadsheet Templates. Во время установки пользователь может указать подблоки, которые следует установить на компьютере локально или запускать с сервера, добавить при первом обращении к ним (обозначается единицей в пиктограмме подблока) или вообще не требуется устанавливать. Метод «объявления» (advertisement) подблоков описан по врезке «Возможности объявлений».
Функциональные блоки состоят из компонентов, которые представляют третий уровень иерархии .msi-файла. Компонент — это базовая единица пакета Windows Installer и строительный блок приложения. Компонент может быть файлом или группой файлов, параметром реестра, ярлыком или ресурсом (например, пиктограммой). С компонентом связан ключевой путь (key path). Ключевой путь определяет файл или параметр, без которого невозможна полная установка компонента. Ключевой путь — основа механизма самовосстановления пакетов на базе Windows Installer. При ремонте .msi-упакованного приложения служба Windows Installer проверяет полноту всех ключевых путей компонентов. Если ключевой путь какого-нибудь компонента отсутствует, служба Windows Installer определяет, какому функциональному блоку принадлежит компонент, и повторно устанавливает функциональный блок. Таким образом, время, необходимое для ремонта развернутого приложения, отчасти зависит от числа компонентов в пакете и числа компонентов в функциональном блоке, содержащем испорченный компонент.
База данных Windows Installer
Как отмечалось ранее, .msi-файл представляет собой набор инструкций по установке, организованных в таблицы. Windows Installer SDK определяет каждую таблицу и столбец. С помощью редактора баз данных Orca из Windows Installer SDK можно просматривать и редактировать содержимое .msi-файла. .msi-файл установки для Orca находится в подкаталоге in установочного каталога Platform SDK (например, c:program filesplatform sdkin). После установки Orca можно открыть любой .msi-файл. В левой панели интерфейса Orca представлен список таблиц файла. Выделив таблицу, в правой панели можно увидеть ее строки и столбцы.
Экран 2. Таблицы базы данных приложения, упакованного для Windows Installer |
На экране 2 показана таблица LaunchCondition пакета Windows Installer для Group Policy Management Console (GPMC). В правой панели таблицы представлены минимальные требования к операционной системе и платформе для установки GPMC. В столбце Condition содержатся условия, которые должны быть выполнены в процессе установки. В столбце Description описаны минимальные требования для набора условий. Приступая к установке приложения, Windows Installer проверяет, удовлетворены ли условия запуска, прежде чем продолжить установку.
Таблицы последовательностей (sequence table) представляют собой ядро базы данных; в них перечислены действия, которые служба Windows Installer должна выполнить в процессе установки, и порядок их выполнения. Например, в таблице последовательностей указывается, что механизм Installer должен сначала проверить условия запуска в таблице LaunchCondition, затем скопировать исходные файлы в каталог назначения и подготовить набор элементов реестра. Таблицы последовательностей бывают трех типов: Admin, Advertisement и Install. Тип таблицы последовательностей, используемый Windows Installer, зависит от типа выполняемой процедуры установки. Описания типов таблиц последовательностей даны в таблице 1.
С каждой таблицей последовательностей связаны две вспомогательные таблицы. Одна из них — InstallUISequence — определяет диалоговые окна пользовательского интерфейса, которые должны отображаться при интерактивной (управляемой пользователем) установке. Другая таблица — так называемая таблица «исполнительной последовательности» (execute sequence; InstallExecuteSequence) — определяет шаги, необходимые для установки.
Последовательность состоит из набора заранее определенных стандартных функций, которые перечислены в столбце Action таблицы InstallExecuteSequence. Стандартные функции выполняют разнообразные задачи, в том числе копирование файлов, поиск новых версий программы и определение размера дискового пространства, доступного при установке. В документации SDK и Orca приведены подробные сведения о назначении конкретного пакета Windows Installer. С помощью Orca можно подготовить специальные операции для задач, которые нельзя решить с использованием стандартных функций пакета Windows Installer. Специальная операция может быть DLL, составленной пользователем, и даже сценарием VBScript для таких действий, как поиск в Active Directory (AD) определенных значений перед продолжением установки.
Таблица Property — еще одна важная часть базы данных .msi. Свойства представляют собой постоянные величины, задавая которые можно управлять ходом установки. В сущности, свойства есть переменные среды для .msi-файла. В пакетах Windows Installer часто используется свойство ALLUSERS, которое указывает процедуре установки, каким образом хранится информация о конфигурации приложения — для пользователя или для компьютера. Имена свойств чувствительны к регистру и их можно указывать в командной строке во время установки или используя трансформацию.
Трансформации, исправления и модули слияния
.msi-файл, полученный от поставщика, часто не располагает всем необходимым для развертывания пакета в конкретной среде. Например, потребитель может пожелать развернуть пакет автоматически с помощью инструмента развертывания программного обеспечения или установить только определенные функциональные блоки. В такой ситуации могут пригодиться трансформации. Трансформация — это специальный тип файла базы данных .msi, обычно имеющего расширение .mst. Трансформации применяются к процедуре развертывания приложения во время установки. В сущности, они изменяют выбираемые по умолчанию значения в пакете .msi, управляя процессом установки. Измененные значения в .msi-файле не сохраняются; они просто определяют, как будет протекать конкретная установка.
Файлы исправлений (patch file или .msp-файлы) отличаются от трансформаций. Как правило, поставщик выпускает файл исправлений, когда нужно модернизировать продукт, не прибегая к его глубокой переработке. Примером исправлений могут служить обновления для системы безопасности. После установки исправления в экземпляре .msi-файла, хранящемся в кэше рабочей станции, производятся постоянные изменения. Чтобы новые пользователи в будущем получали обновленные файлы, следует применить файлы исправлений к исходному пакету приложения.
Еще один вариант .msi-файла — модуль слияния (merge module, или .msm-файл), набор компонентов, многократно используемых при установке приложений. Например, в различных программах независимых поставщиков применяются компоненты Microsoft Data Access Components (MDAC). Вместо того чтобы воспроизводить установку общих компонентов в каждом новом .msi-пакете, авторы пакетов приложений могут задействовать модули слияния, предоставляемые поставщиками общих компонентов. Модули слияния — упрощенные файлы базы данных .msi, содержащие только общие функциональные блоки и компоненты для процедур установки приложений. Часто собственно компонентные файлы встраиваются в .msm-файл, что позволяет использовать модули слияния с разными пакетами. Затем .msm-файлы вставляются в основной пакет Windows Installer для данного приложения на этапе создания пакета.
При подготовке нового пакета установки файлы приложения можно вставить в .msi-файл. Как правило, файлы вставляются в виде встроенных файлов .cab, которые представляют собой сжатые наборы файлов, похожие на .zip-файлы. В .msi-файл удобно вставлять .cab-файлы не очень большого размера. Например, в Office имеются отдельные .msi- и .cab-файлы, так как размеры .cab-файлов Office достигают нескольких сотен мегабайт. Однако, упаковав все необходимые файлы малого приложения в .msi-файл, можно получить компактный файл, который удобно распространять среди пользователей. Извлечь встроенный .cab-файл из .msi-файла можно с помощью инструмента msidb.exe пакета Windows Installer SDK.
Служба Windows Installer
Пакеты Windows Installer и служба Windows Installer взаимозависимы: они не могут существовать друг без друга. Служба Installer по умолчанию устанавливается на всех компьютерах с версиями операционной системы, выпущенными после Windows 2000: редистрибутивную версию (автономную версию службы Installer и сопутствующие DLL) можно развернуть на компьютерах Windows NT Server 4.0 и Windows 9x. Служба Installer работает в контексте привилегированной пользовательской учетной записи LocalSystem. Чтобы запустить службу Windows Installer, нужно дважды щелкнуть на .msi-файле (например, в Windows Explorer); при запуске службы формируется новый процесс Installer (msiexec.exe) в контексте полномочий пользователя. После того как Windows Installer завершит установку приложения, служба Installer закрывается до следующего обращения к ней.
Служба Windows Installer обеспечивает набор функций, удобных для развертывания программ, особенно при использовании совместно с функцией Software Installation в Group Policy. Главная среди этих функций — повышение полномочий (privilege escalation). Когда обычный пользователь пытается установить приложение на своем компьютере, дважды щелкнув на .msi-файле, его полномочий для выполнения установки не всегда достаточно. Однако при развертывании приложения с помощью функции Software Installation групповой политики служба Windows Installer выполняет установку в своем контексте безопасности LocalSystem.
В частности, служба Installer создает новый процесс msiexec.exe в контексте безопасности пользователя для выполнения той части установки, которая проводится в пользовательском профиле. Служба Installer использует собственный повышенный контекст безопасности (учетную запись LocalSystem) для выполнения специфической для данного компьютера части процедуры установки, для проведения которой у пользователя полномочий нет. Приложения, развернутые таким способом, называются управляемыми (managed applications). Повышение полномочий, используемое Windows Installer для управляемых приложений, как правило, возможно только при применении групповой политики, хотя метод доступен и вне процедур на базе Group Policy Object (GPO), через политику Administrative Template.
В рамках взаимозависимых отношений между Group Policy и службой Windows Installer реализованы объявления (advertisement). Как отмечалось ранее, при связывании программы с пользователем в Group Policy, в сущности, производится установка с объявлением. Таким образом, механизм Windows Installer обрабатывает сценарий объявления приложения (файл .aas), а не непосредственно .msi-файл. Файл .aas создается, когда для развертывания приложения используется Group Policy. Чтобы создать .aas-файл, редактор Group Policy Editor (GPE) вызывает функцию, экспортируемую из msi.dll (основная DLL, используемая msiexec.exe), которая генерирует уникальный сценарий объявлений внутри GPO. Таким образом, когда механизм Windows Installer обрабатывает сценарий объявлений, ему известно местонахождение соответствующего .msi-файла и части приложения, которые нужно объявить. Другими словами, процедура установки программ на базе GPO тесно связана со службой Windows Installer и наоборот.
Хранение файлов Installer на рабочей станции
Рассмотрим, что происходит на рабочей станции, когда служба Windows Installer устанавливает пакет .msi. Во-первых, чтобы обеспечить отмену действий в случае сбоя, Installer делает резервные копии всех замененных файлов, сохраняя их во временной папке на жестком диске пользователя, обычно C:config.msi. Заглянув в эту папку в ходе установки, можно увидеть в ней временные файлы с необычными именами, созданные службой Installer. После завершения установки служба Installer удаляет временные файлы.
Закончив установку, Windows Installer сохраняет экземпляр ассоциированного .msi-файла и любые трансформации, использовавшиеся Windows Installer при установке приложения, в папке \%windir%installer, назначая файлам уникальные условные имена (например, 19fe9b79.msi). Файлы в \%windir%installer в действительности представляют собой кэшированные копии всех .msi-файлов, обработанных службой Windows Installer на компьютере. Благодаря наличию кэшированных копий пользователь может изменить или удалить приложение, не обращаясь к оригинальному пакету установки, который может находиться на разделяемом диске сервера, недоступном мобильному пользователю. Windows отслеживает все развернутые приложения на базе .msi; имеющиеся функциональные блоки, компоненты и исправления, а также имя кэшированного .msi-файла в реестре.
Чтобы выяснить, какой .msi-файл с непонятным именем соответствует данному приложению на рабочей станции, следует перейти в раздел реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionInstallerUserData. Разделы упорядочены по SID имени пользователя; первой показана учетная запись LocalSystem, S-1-5-18, далее обычно перечисляются все приложения, установленные на компьютере. Список доступных пользователю программ приведен под соответствующим SID пользователя.
Запуск Installer Files из командной строки и в сценариях
Существует два дополнительных способа запуска пакетных установок Windows Installer — из командной строки и сценария. С помощью msiexec.exe можно выполнять различные процедуры установки из командной строки. Полный список функций командной строки для msiexec.exe приведен в статье Microsoft «Command-Line Switches for the Microsoft Windows Installer Tool» по адресу http://support.microsoft.com/?kbid=227091. Например, из командной строки можно установить один функциональный блок в прикладном пакете, такой как инструменты консоли DNS в пакете Windows 2003 Administration Tools (adminpak.msi). С помощью Orca следует отыскать нужное имя функционального блока — в данном случае FeDNSConsole — и запустить msiexec.exe из командной строки, чтобы произвести установку:
msiexec /I adminpak.msi ADDLOCAL=FeDNSConsole
Свойство ADDLOCAL используется данной командой, чтобы указать службе Windows Installer функциональные блоки пакета, которые необходимо установить. Метод командной строки используется вместо выбора функциональных блоков пользователями или установки отдельных блоков администратором с помощью файла трансформации.
В Windows Installer SDK имеются примеры, поясняющие использование сценариев Windows Script Host (WSH) для взаимодействия со службой Windows Installer и пакетами .msi. Объект WindowsInstaller.Installer располагает методами и свойствами, которые можно применять в сценариях для выполнения таких операций, как подготовка списка всех .msi-пакетов, имеющихся в системе, добавление .cab-файла в базу данных .msi, применение трансформации в ходе установки и сравнение двух .msi-файлов базы данных. Более подробную информацию о сценарных объектах Windows Installer можно получить, изучив сценарии примеров Installer SDK в папке http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/using_the_automation_interface.asp.
Как было показано выше, задачи Windows Installer не ограничиваются простым щелчком на .msi-файле. Мощная технология Windows Installer позволяет гибко и быстро устанавливать программы, но для эффективного использования службы необходимо понимать принципы ее работы.
Даррен Мар-Элиа — редактор журнала Windows & NET Magazine. С ним можно связаться по адресу: dmarelia@winnetmag.net
Возможности объявлений
Объявление приложений — компонент Windows Installer, который широко используется при развертывании приложений с помощью Group Policy. Объявленное приложение на самом деле не устанавливается на настольном компьютере пользователя, обозначается лишь «присутствие» приложения. Это может быть ярлык на рабочем столе или в меню Start, ассоциирование файлов в реестре и даже COM-компонент, зарегистрированный в HKEY_CLASSES_ROOT. Объявление оповещает пользователя о том, что приложение установлено и готово к использованию. Однако сами файлы приложения разворачиваются лишь после первого обращения пользователя к приложению. Преимущество объявлений заключается в том, что приложения доступны, но устанавливаются лишь после того, как в них возникает необходимость. Благодаря объявлениям, администратору, обслуживающему 20 тыс. настольных компьютеров, приходится обновлять приложения только на компьютерах, пользователи которых действительно работают с этими программами. Недостаток объявлений — вынужденное ожидание в течение нескольких минут, пока система устанавливает приложение для первого запуска.
Типы таблиц последовательностей
Тип таблицы последовательностей | Описание |
Admin | Используется для административных установок приложений (с сервера) |
Advertisement | Используется для установки с объявлениями |
Install | Используется для интерактивных или автоматических установок на локальном компьютере — наиболее распространенный тип |
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Appearance settings