Как устроен установочный пакет Windows

Установочный пакет Windows — это файл, содержащий все данные, необходимые для размещения программы или компонента операционной системы на компьютере. Внутри пакета хранятся не только сами файлы, но и инструкции по их размещению, изменения в реестре, условия установки и способы отката. Понимание внутренней структуры помогает оценить, насколько пакет надёжен, как его можно распаковать для проверки и какие ограничения накладывает используемая технология.

Основные типы установочных пакетов Windows

В зависимости от способа доставки и уровня сложности применяются разные форматы. Наиболее распространённые:

  • MSI (Microsoft Installer) — пакет, основанный на технологии Windows Installer. Хранит данные в виде таблиц и потоков внутри одного файла.
  • EXE‑установщик — обычный исполняемый файл, который может содержать внутри себя MSI, распакованные файлы или скрипты установки (часто используется как «бутстрэппер»).
  • MSU — пакет обновления Windows, используемый для распространения патчей и сервис‑паков через Центр обновления Windows.
  • ClickOnce и App‑X — форматы для развёртывания приложений через сеть или Microsoft Store, но они менее типичны для классических desktop‑приложений.

Далее рассматривается внутреннее устройство MSI, поскольку именно он представляет собой полноценный «установочный пакет» с чётко описанной структурой.

Что внутри MSI‑файла

MSI — это essentially база данных в формате COM‑структурированного хранилища. При открытии такого файла (например, программой Orca или архиватором 7‑Zip) видно два основных вида объектов:

Таблицы

Таблицы описывают всё, что нужно сделать при установке: какие файлы копировать, какие ключи реестра писать, какие действия выполнять, какие условия проверять. Наиболее важные таблицы:

  • File — список файлов, которые будут установлены, их исходное расположение в пакете и целевая папка.
  • Directory — иерархия папок на целевом диске.
  • Component — группирует файлы, реестр и другие ресурсы, которые обрабатываются как единая единица (компонент). Позволяет включать/исключать части продукта.
  • Registry — записи, которые будут добавлены, изменены или удалены в реестре Windows.
  • CustomAction — пользовательские действия (DLL‑функции, скрипты, исполняемые файлы), выполняемые на определённых этапах установки.
  • InstallExecuteSequence и InstallUISequence — порядок вызова стандартных и пользовательских действий во время бесшумной и графической установки соответственно.
  • Property — глобальные свойства, влияющие на ход установки (например, уровень логирования, выбор языка).

Потоки (Streams)

Потоки содержат бинарные данные, на которые ссылаются таблицы:

  • Файлы, которые будут скопированы (обычно упакованы в внутренние CAB‑файлы).
  • Библиотеки DLL, используемые в CustomAction.
  • Скрипты VBScript или JScript, если они применяются.
  • Диалоговые окна и пользовательский интерфейс (в таблице Control и связанных потоках).

Все таблицы и потоки упакованы в один файл, что делает MSI самодостаточным: достаточно скопировать его на целевой компьютер и запустить msiexec /i package.msi.

Как происходит установка

Запуск MSI‑пакета инициирует процесс Windows Installer. Он последовательно проходит несколько фаз:

  1. Проверка условий — оцениваются свойства и условия из таблиц LaunchCondition, чтобы убедиться, что система соответствует требованиям (версия ОС, наличие компонентов и т.д.).
  2. Копирование файлов — файлы из внутренних CAB‑контейнеров распаковываются в временную папку, затем копируются в целевые директории согласно таблице File и Directory.
  3. Изменение реестра — применяются записи из таблицы Registry.
  4. Выполнение пользовательских действий — по порядку из InstallExecuteSequence вызываются CustomAction (например, запуск конфигурационных скриптов, создание служб).
  5. Финализация — запись информации о продукте в реестр ( uninstall раздел), создание записей в Programs and Features.
  6. Удаление временных файлов — очистка рабочих каталогов.

На каждом этапе возможен откат: если действие завершилось ошибкой, Windows Installer отменяет уже сделанные изменения, используя информацию, сохранённую в журнале установки.

EXE‑установщики и бутстрэпперы

Многие программы распространяются как обычный exe‑файл. Внутри такого файла может быть:

  • Сам MSI‑пакет, который извлекается во временную папку и затем запускается через msiexec.
  • Набор распакованных файлов и собственный скрипт установки (часто написанный на языке установщика типа Inno Setup, NSIS или InstallShield).
  • Комбинация того и другого: сначала проверяются предварительные условия, потом распаковываются компоненты, потом вызывается MSI для основной части.

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

MSU‑пакеты обновлений

MSU — это также архив, но внутренне он устроен проще: содержит один или несколько CAB‑файлов с файлами обновления и XML‑манифест, описывающий, какие компоненты системы нужно заменить или добавить. Установка происходит через команду wusa.exe (Windows Update Standalone Installer), которая проверяет применимость обновления к текущей версии ОС и выполняет замену файлов, изменение реестра и запись в журнал обновлений.

Практическая работа с установочными пакетами

Для анализа или изменения пакета часто достаточно посмотреть его содержимое без полной установки.

Как посмотреть содержимое MSI

  • Открыть файл в 7‑Zip, WinRAR или аналогичном архиваторе — он покажет внутренние таблицы и потоки как обычные файлы.
  • Использовать специализированный редактор Orca (входит в Windows SDK) для просмотра и редактирования таблиц directly.
  • Выполнить команду msiexec /a package.msi /qn TARGETDIR=C:\Extract — административная установка распаковывает файлы в указанную папку без регистрации продукта в системе.
  • Как проверить EXE‑установщик

    • Запустить его с параметром /extract или /silent (зависит от 제작щика); многие установщики поддерживают такие ключи.
    • Если параметры неизвестны, можно воспользоваться универсальным экстрактором (Universal Extractor), который попытается определить тип упаковщика и извлечь содержимое.
    • В случае, когда внутри находится MSI, извлечённый файл можно далее исследовать как описано выше.
    • Ограничения и моменты, на которые стоит обратить внимание

      • MSI не позволяет произвольно менять порядок действий без пересборки пакета; изменение таблиц требует пересоздания файла.
      • Некоторые EXE‑установщики intentionally делают извлечение файлов сложным (шифрование, custom unpacker), чтобы затруднить обратный инжиниринг.
      • При установке через msiexec можно задать уровень журналирования (/l*v log.txt) для диагностики проблем.
      • Откат работает только если все изменения записаны в журнал; если CustomAction сам модифицирует систему вне отслеживаемого механизма, откат может быть частичным.
      • Для корпоративного развёртывания часто используют административную установку (/a) и последующее распространение уже распакованных файлов через групповые политики или системы управления конфигурациями.

      Выбор типа пакета для собственного продукта

      Если вам нужно создать установочный пакет, учитывайте следующие факторы:

      • Сложность установки: простая копия файлов и несколько записей в реестр — MSI подойдёт без лишних усилий.
      • Нужен ли custom‑интерфейс с лицензией, выбором компонентов, проверкой предварительных условий — тогда рассмотрите EXE‑бутстрэппер, который может обернуть MSI или использовать собственный скрипт (Inno Setup, NSIS).
      • Требования к откату иTransactional поведению — MSI предоставляет встроенный механизм отката, что сложно реализовать в самописном установщике.
      • Планируется ли распространение через Центр обновления Windows или WSUS — тогда формат MSU обязателен для обновлений ОС.
      • Необходимость поддержки старых версий Windows (например, XP) — некоторые современные инструменты могут генерировать только MSI для новых версий, тогда потребуется выбрать совместимый набор инструментов.

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

      Что делать дальше

      Если вам нужно просто оценить уже существующий пакет:

      1. Определите его тип по расширению и содержимому (MSI, EXE, MSU).
      2. Для MSI — откройте в Orca или 7‑Zip, посмотрите таблицы File, Directory, Registry и CustomAction на предмет подозрительных действий (например, запуск неизвестных исполняемых файлов).
      3. Для EXE — попробуйте извлечь содержимое с помощью универсального экстрактора или ищите параметры командной строки для silenz‑режима.
      4. Запустите установку в тестовой среде с журналированием (/l*v install.log) и проверьте log‑файл на ошибки или предупреждения.
      5. Если планируется распространение в корпоративной среде, подготовьте административную установку (/a) и проверьте, что все файлы доступны для копирования без прав администратора.

      Для создания собственного пакета начните с простого MSI‑проекта в бесплатном инструменте (WiX Toolset). Определите компоненты, файлы и записи реестра, соберите пакет и протестируйте его на чистой виртуальной машине.

PEFile.ru