Утилита 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
Сравнение способов создания CAB
Каждый метод решает свою задачу. Сводная таблица поможет выбрать подходящий инструмент:
| Способ | Несколько файлов | Настройка сжатия | Автозапуск после распаковки |
|---|---|---|---|
| makecab (1 файл) | Нет | Через ключи | Нет |
| makecab + DDF | Да | Полная | Нет |
| IExpress | Да | Базовая | Да (SED-сценарий) |
| Сторонние архиваторы | Да | Зависит от программы | Нет |
Только связка makecab с DDF-файлом даёт полный контроль над структурой архива: именами внутренних папок, порядком файлов и параметрами каждого элемента. Для пакетов драйверов, где важна точная компоновка, это единственный предсказуемый вариант.
Создание самораспаковывающегося пакета через 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.