Включение cab-файла в установку

В этом разделе описывается включение cab-файлов в установки. Дополнительные сведения см. в разделе Использование шкафов и сжатых источников.

Включение cab-файла в пакет установки

  1. Используйте средство создания шкафа для сжатия исходных файлов в cab-файл. См . раздел Файлы кабинета.
  2. Cab-файл должен находиться либо в потоке данных внутри файла .msi, либо в отдельном cab-файле, расположенном в корне исходного дерева, заданного таблицей каталогов.
  3. Определите, является ли источник сжатым или смешанным типом, который содержит как несжатые, так и сжатые файлы. См. статью Сжатые и несжатые источники. В зависимости от типа исходного изображения задайте сжатые или несжатые биты флагов свойства сводки Word Count.
  4. Добавьте запись в таблицу Файл для каждого файла в шкафу. В столбце Файл введите ключ файла, который точно соответствует ключу файла в шкафу. Ключи файлов чувствительны к регистру. Последовательность установки файлов в таблице File и кабинете также должна быть одинаковой. Последовательность файлов задается порядковый номер в столбце Последовательности. Чтобы получить порядковый номер для первого файла в шкафу, выполните следующие действия. Найдите существующую запись в таблице Media с наибольшим значением в столбце DiskID. Поле LastSequence этой записи содержит последний порядковый номер файла, используемый на носителе. В таблице Файл назначьте первому файлу нового шкафа порядковый номер, превышающий этот. Назначьте порядковые номера всем остальным файлам в том же порядке, что и в cab-файле. Описание оставшихся полей записей см. в разделе Таблица файлов.
  5. Добавьте запись в таблицу Media для шкафа. Укажите в поле DiskID этой новой записи значение, превышающее наибольшее значение DiskID, которое уже существует в таблице. Введите название шкафа в поле Кабинет. Это имя должно быть в виде типа данных Cabinet . Если кабинет является потоком данных, хранящимся в файле .msi, добавьте к имени знак цифры "#". Обратите внимание, что если кабинет является потоком данных, в его имени учитывается регистр. Если кабинет является отдельным файлом, имя файла не учитывается с учетом регистра.
  6. Определите наибольший порядковый номер файла в новом кабинете, проверив столбец Последовательности обновленной таблицы File. Введите большее значение в поле LastSequence новой записи таблицы Media. Описание оставшихся полей записей см. в таблице Мультимедиа.
  7. Cab-файл можно сохранить в пакете установки с помощью средства, например Msidb.exe, или с помощью функций базы данных установщика. В следующих четырех шагах объясняется, как добавить кабинет из программы с помощью функций базы данных.
  8. Чтобы добавить шкаф в пакет установки из программы, откройте представление _Streams таблицы базы данных с помощью MsiDatabaseOpenView.
  9. Используйте MsiRecordSetString , чтобы задать в столбце Name таблицы _Streams имя, отображающееся в столбце Кабинет таблицы Media. Опустите числовой знак: #.
  10. Используйте MsiRecordSetStream , чтобы задать в столбце Данные таблицы _Streams данные кабинета.
  11. Используйте MsiViewModify для обновления записи в таблице _Streams.
  12. Чтобы использовать Msidb.exe для добавления cab-файла Mycab.cab в пакет установки с именем Mydatabase.msi, используйте следующую командную строку: Msidb.exe -d mydatabase.msi -a mycab.cab. В этом случае столбец Кабинет таблицы Media должен содержать строку : #mycab.cab.