Как создать CAB архив в Windows

Утилита makecab.exe уже встроена в Windows, поэтому создать CAB архив можно без установки сторонних программ — достаточно одной команды в терминале. Формат CAB (Cabinet) используется самой системой для распространения обновлений, драйверов и установочных пакетов, поэтому упаковка файлов в него — типичная задача для системных администраторов, разработчиков драйверов и тех, кто готовит инфраструктурные пакеты.

В этой статье разберём несколько рабочих способов: штатную консольную утилиту makecab, мастер IExpress для самораспаковывающихся пакетов и сторонние инструменты. Отдельно покажем, как проверить содержимое готового архива и извлечь файлы обратно.

Что такое формат CAB и когда он нужен

CAB (Cabinet) — проприетарный формат архивов Microsoft, который поддерживает сжатие с потерей объёма через алгоритмы LZX, MSZIP и без сжатия (None). Главная особенность формата — нативная поддержка в Windows: проводник, установщики и система обновлений работают с CAB-файлами без дополнительных кодеков.

Типичные сценарии, где без CAB не обойтись:

  • 📦 Подготовка пакета драйверов для установки через pnputil или диспетчер устройств
  • 🔄 Создание пакетов обновлений и компонентов для развёртывания
  • 🛠️ Упаковка файлов для установщиков, ожидающих именно cabinet-формат
  • 🗜️ Сжатие набора файлов с сохранением цифровой подписи структуры пакета

Для обычного хранения фотографий или документов формат неудобен: ZIP или 7z справляются лучше и открываются везде. CAB имеет смысл именно там, где его требует целевая система или инструмент.

Создание CAB через makecab: базовая команда

Самый прямой способ — команда makecab в командной строке или PowerShell. Утилита присутствует во всех современных версиях Windows и не требует прав администратора для упаковки обычных файлов.

Чтобы упаковать один файл, откройте командную строку и выполните:

makecab C:\Data\driver.inf C:\Output\driver.cab

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

⚠️ Внимание: makecab упаковывает только те файлы, которые явно перечислены. Указание папки как источника не добавит её содержимое автоматически — для групповой упаковки нужен DDF-файл, о котором ниже.

Упаковка нескольких файлов через DDF-файл

Когда нужно поместить в один CAB несколько файлов, используется директивный файл с расширением .ddf (Diamond Directive File). Это текстовый сценарий, в котором описываются параметры архива и список упаковываемых объектов.

Создайте в любом текстовом редакторе файл package.ddf примерно такого содержания:

.OPTION EXPLICIT

.Set CabinetNameTemplate=package.cab

.Set DiskDirectoryTemplate=Output

.Set CompressionType=LZX

.Set Cabinet=on

.Set Compress=on

"C:\Data\file1.inf"

"C:\Data\file2.sys"

"C:\Data\file3.cat"

Затем запустите сборку командой:

makecab /f C:\Data\package.ddf

После завершения в папке Output появится готовый package.cab. Директива CompressionType управляет алгоритмом: LZX даёт более сильное сжатие, MSZIP работает быстрее и совместим со старыми инструментами.

☑️ Проверка перед сборкой CAB через DDF

Выполнено: 0 / 5

Сравнение способов создания CAB

Каждый метод решает свою задачу. Сводная таблица поможет выбрать подходящий инструмент:

Способ Несколько файлов Настройка сжатия Автозапуск после распаковки
makecab (1 файл) Нет Через ключи Нет
makecab + DDF Да Полная Нет
IExpress Да Базовая Да (SED-сценарий)
Сторонние архиваторы Да Зависит от программы Нет

Только связка makecab с DDF-файлом даёт полный контроль над структурой архива: именами внутренних папок, порядком файлов и параметрами каждого элемента. Для пакетов драйверов, где важна точная компоновка, это единственный предсказуемый вариант.

📊 Какой способ создания CAB вы используете?
makecab с одной командой
makecab с DDF-файлом
Мастер IExpress
Сторонние архиваторы

Создание самораспаковывающегося пакета через IExpress

Утилита IExpress — малоизвестный, но встроенный в Windows мастер, который создаёт исполняемый EXE-пакет с CAB внутри. При запуске такой пакет сам распаковывает файлы и может выполнить указанную команду, например запустить INF-установку.

Чтобы открыть мастер, нажмите Win + R, введите iexpress и подтвердите. Дальше работа идёт по шагам:

  • 🧭 Выберите создание нового SED-файла и тип пакета — распаковка с запуском команды или просто извлечение
  • 📂 Добавьте файлы, которые попадут в архив
  • ▶️ При необходимости укажите команду, выполняемую после распаковки (например, установку INF)
  • 💾 Задайте имя выходного EXE и сохраните SED-сценарий для повторных сборок

Такой подход удобен, когда получатель пакета не должен ничего настраивать: достаточно запустить файл. Однако помните, что самораспаковывающиеся EXE иногда блокируются антивирусами и почтовыми фильтрами — для корпоративной рассылки чистый CAB надёжнее.

Сторонние инструменты и проверка результата

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

Как проверить содержимое готового CAB

Откройте командную строку и выполните: expand -D имя_файла.cab — команда покажет список упакованных файлов без извлечения. Для полной распаковки используйте: expand имя_файла.cab -F:* папка_назначения. Также CAB-файл можно просто открыть двойным кликом в проводнике Windows — он отобразится как архив.

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

⚠️ Внимание: если CAB предназначен для установки драйверов, изменение состава файлов после подписания пакета делает цифровую подпись недействительной. Сначала финализируйте содержимое, затем подписывайте — не наоборот.

Частые ошибки при создании CAB

На практике чаще всего встречаются три проблемы. Первая — ошибка «файл не найден» из-за относительных путей: запускайте makecab из папки проекта или используйте абсолютные пути в DDF. Вторая — пустой архив из-за синтаксической ошибки в директивном файле: проверьте, что каждая строка с файлом идёт после блока директив и не содержит лишних символов.

Третья типичная ситуация — получатель не может открыть архив старой программой. Здесь помогает смена алгоритма сжатия с LZX на MSZIP, который понимают более старые инструменты. Если же архив не открывается вообще нигде, вероятно, сборка прервалась — пересоздайте файл и сверьте его размер с ожидаемым.

⚠️ Внимание: не переименовывайте обычный ZIP в .cab вручную — внутренняя структура форматов различается, и такой файл не сможет обработать ни один установщик.

FAQ: частые вопросы о CAB-архивах

Чем CAB отличается от ZIP?

CAB — формат Microsoft, ориентированный на установочные пакеты: его нативно обрабатывают установщики Windows и система обновлений. ZIP универсальнее и поддерживается большинством программ, но для пакетов драйверов и обновлений требуется именно CAB.

Можно ли создать CAB без командной строки?

Да. Мастер iexpress работает через графический интерфейс и создаёт самораспаковывающийся пакет с CAB внутри. Некоторые сторонние архиваторы также поддерживают запись в cabinet-формат — уточняйте это в документации конкретной программы.

Как распаковать CAB архив?

Дважды кликните по файлу в проводнике Windows либо выполните команду expand имя.cab -F:* папка в командной строке. Просмотреть содержимое без распаковки можно командой expand -D имя.cab.

Почему makecab выдаёт ошибку при указании папки?

Утилита не принимает папку как источник — она упаковывает только явно перечисленные файлы. Для групповой упаковки создайте DDF-файл со списком объектов и запустите makecab /f файл.ddf.

Какой алгоритм сжатия выбрать: LZX или MSZIP?

LZX обычно даёт меньший размер архива, MSZIP — быстрее и совместим со старыми утилитами. Если пакет будут обрабатывать современные версии Windows, выбирайте LZX; для максимальной совместимости — MSZIP.