Для упаковки драйвера или набора системных файлов в установочный пакет Windows часто требуется именно формат CAB (Cabinet) — это родной архивный формат Microsoft, который используется в установщиках, обновлениях и дистрибутивах драйверов. Создать такой архив можно штатной утилитой makecab.exe, которая уже встроена в Windows, либо через сторонние архиваторы.
В этой статье разберём все рабочие способы: от простой команды в консоли до создания многотомных архивов через директивные файлы DDF. Отдельно остановимся на типичных ошибках, из-за которых CAB-файл получается битым или не читается установщиком.
Что такое CAB-файл и когда он нужен
Cabinet — это архивный формат с поддержкой сжатия, цифровой подписи и разбиения на тома. Windows использует его повсеместно: пакеты обновлений, файлы драйверов, компоненты системы распространяются именно в виде CAB-архивов. Если вы готовите пакет драйверов для установки через pnputil или собираете собственный установщик, без этого формата не обойтись.
Формат поддерживает несколько алгоритмов сжатия: MSZIP и более эффективный LZX. Для совместимости с системными инструментами важно, чтобы архив был создан корректной утилитой — не каждый сторонний архиватор формирует CAB так, чтобы его приняли установщики Windows.
Способ 1: создание CAB через makecab
Самый надёжный метод — встроенная утилита makecab.exe, которая присутствует в системе по умолчанию. Откройте командную строку (для упаковки системных файлов желательно от имени администратора) и перейдите в папку с исходным файлом командой cd.
Базовый синтаксис упаковки одного файла выглядит так:
makecab имя_файла.ext имя_архива.cab
Например, чтобы упаковать файл драйвера driver.inf, выполните makecab driver.inf driver.cab. Утилита создаст архив в текущей папке и выведет отчёт о степени сжатия. Если нужно упаковать сразу несколько файлов в один CAB, простой команды недостаточно — потребуется DDF-файл, о котором ниже.
⚠️ Внимание: makecab перезаписывает существующий CAB-файл с тем же именем без предупреждения. Перед запуском убедитесь, что в папке нет нужного архива с совпадающим названием.
Способ 2: упаковка нескольких файлов через DDF
Чтобы собрать в один архив целую папку с файлами, создайте директивный файл с расширением .ddf в любом текстовом редакторе. В нём задаются параметры сжатия, имя архива и список включаемых файлов.
Пример содержимого DDF-файла:
.OPTION EXPLICIT
.Set CabinetNameTemplate=package.cab
.Set DiskDirectoryTemplate=.
.Set CompressionType=LZX
.Set Cabinet=on
.Set Compress=on
file1.inf
file2.sys
file3.cat
После этого запустите команду makecab /f package.ddf. Утилита прочитает директивы и соберёт все перечисленные файлы в один архив package.cab. Параметр CompressionType=LZX обеспечивает более плотное сжатие по сравнению со стандартным MSZIP.
☑️ Проверка перед созданием CAB через DDF
Способ 3: сторонние архиваторы
Если командная строка неудобна, CAB-архивы умеют создавать некоторые графические архиваторы. Возможности зависят от конкретной программы и её версии, поэтому перед использованием проверьте в настройках форматов, поддерживается ли именно создание (а не только распаковка) CAB.
- 📦 7-Zip — открывает и распаковывает CAB, но создание этого формата не поддерживает;
- 🗜️ PowerArchiver и подобные коммерческие архиваторы — в ряде версий заявлена запись CAB;
- 🛠️ IExpress — встроенный в Windows мастер, который упаковывает файлы в CAB вместе с установочным сценарием;
- 📁 Специализированные утилиты для сборки пакетов драйверов — актуальны для системных администраторов.
Утилита IExpress заслуживает отдельного упоминания: она запускается командой iexpress в окне «Выполнить» и позволяет в пошаговом режиме собрать самораспаковывающийся пакет. Это удобно, когда CAB нужен не сам по себе, а как часть установщика.
Сравнение способов создания CAB
Выбор метода зависит от задачи: одиночный файл, пакет драйверов или установочный комплект. Сводная таблица поможет определиться:
| Способ | Сложность | Несколько файлов | Подходит для драйверов |
|---|---|---|---|
| makecab (одна команда) | Низкая | Нет | Да, для одного файла |
| makecab + DDF | Средняя | Да | Да, оптимально |
| IExpress | Низкая | Да | Частично |
| Сторонние архиваторы | Низкая | Зависит от программы | Проверять совместимость |
Проверка и распаковка созданного архива
После создания архива важно убедиться, что он не повреждён и содержит нужные файлы. Для просмотра содержимого без извлечения используйте команду:
expand -D имя_архива.cab
Для полной распаковки в указанную папку выполните expand имя_архива.cab -F:* папка_назначения. Если команда выдаёт ошибку чтения, вероятные причины — прерванный процесс создания, нехватка места на диске в момент упаковки или некорректный DDF-файл. В таком случае удалите битый архив и повторите сборку заново.
⚠️ Внимание: не переименовывайте обычные ZIP или RAR-архивы в расширение .cab — система определяет формат по внутренней структуре, и такой «архив» установщик не примет.Критичный момент: для пакетов драйверов CAB должен содержать корректный INF-файл и, при необходимости, подписанный CAT-файл — без них установка через системные средства завершится ошибкой.
Почему установщик не принимает мой CAB
Частые причины — архив создан сторонней программой с нестандартной структурой, отсутствует INF-файл в корне архива, нарушена цифровая подпись пакета или CAB повреждён при копировании. Пересоберите архив через makecab и проверьте содержимое командой expand -D.
Типичные ошибки при создании CAB
Разберём проблемы, с которыми чаще всего сталкиваются при упаковке. Во-первых, ошибки путей в DDF: если файлы лежат не в той папке, откуда запущена makecab, укажите полные пути или используйте директиву .Set SourceDir. Во-вторых, конфликт имён — при совпадении имён файлов из разных каталогов часть данных может быть потеряна.
В-третьих, пользователи иногда пытаются упаковать файлы, занятые другими процессами, — например, открытый в редакторе INF. Закройте программы, работающие с исходными файлами, перед запуском утилиты. Наконец, при создании больших архивов следите за свободным местом: временные файлы makecab могут занимать заметный объём.
- ❌ Опечатка в имени файла внутри DDF — утилита завершится с ошибкой;
- ❌ Запуск из системной папки без прав администратора — архив не запишется;
- ❌ Смешение относительных и абсолютных путей в одном DDF;
- ❌ Попытка упаковать файл, заблокированный другим приложением.