C#/.NET: Создание CAB и добавление файлов к нему без внешней библиотеки
Я знаю, что есть похожий вопрос, но помеченный ответ содержит ссылку на внешнюю библиотеку, которая требует установки нескольких зависимостей на компьютере пользователя.
Мне не нужно извлекать или что-то еще, например, перечислять файлы - мне нужно только добавить все содержимое папки в один кабинетный файл. Я знаю, что cabinet.dll существует в папке \Windows\System32, и я надеюсь, что есть простой способ взаимодействия с этой DLL для достижения того, что я пытаюсь сделать.
Возможно ли это сделать без внешней библиотеки? Если бы кто-нибудь мог указать мне правильное направление, я был бы вечно благодарен.
1 ответ
Вы можете взглянуть на WiX и, более конкретно, Microsoft.Deployment.Compression.Cab
сборка. Он имеет хороший API, который позволяет вам сделать это:
CabInfo cab = new CabInfo(@"c:\Work\some.cab");
cab.Pack(@"C:\Work\folder");
Это зависит от Microsoft.Deployment.Compression
сборка, которая является автономной, так что вам понадобятся только эти две сборки.
На прошлой неделе мне нужно было срочно создать CAB-файл для проекта. На самом деле мне хотелось заменить один XML-файл внутри существующего CAB-файла, сохранив структуру папок в CAB-файле. Вскоре я узнал, что простого способа сделать это с помощью 7Zip или WinZip не существует, и что путь к успеху заключался в создании нового CAB-файла с измененными файлами, которые мне нужны. Этот инструмент для создания CAB-файла из всех файлов в папке отлично поработал для меня. Это GUI передний конец утилиты MakeCAB, что создает это описано здесь: https://yieldreturnpost.wordpress.com/2016/06/22/free-tool-to-create-cab-file-from-folder/ Исходный код GitHub находится здесь: https://github.com/sapientcoder/CabMaker
Сначала я использовал команду Expand для извлечения файлов из существующего CAB-файла в структуру папок.
expand -F:* \\MyServer\ServerMigration2020\ExportedConfigurationSourceFiles\MyOriginalCABFile.cab \\MyServer\CaptureSV\ServerMigration2020\Cabfiles\CabSourceFiles
Эта команда Expand извлекла все файлы из моего CAB-файла и поместила их в папку CabSourceFiles, сохранив структуру папок.
Теперь мы готовы запустить графический интерфейс CabMaker для создания нашего CAB-файла. Обратите внимание, что это "простой" CAB-файл, состоящий только из файлов и папок, а не тот, который имеет дополнительные заголовки и является частью набора файлов установщика.
Я просто загрузил код CabMaker C# и запустил его в Visual Studio 2019. Появился графический интерфейс. Я вошел в свою исходную папку (выходная папка в команде "Развернуть"), в свою целевую папку (куда помещается результирующий CAB-файл) и желаемое имя CAB-файла, и нажал кнопку "Создать CAB", и он запустился. Полученный CAB-файл работал прекрасно, успешно импортировался в приложение и приводил к правильно настроенной конфигурации.
Итак, зачем мне создавать CAB-файл? Итак, мы переносили приложение поставщика со старого сервера на новый и использовали функцию "экспорта" приложения для захвата файлов конфигурации текущего состояния, которые мы могли "импортировать" в приложение на новом сервере. альтернативой было использование неуклюжего графического интерфейса пользовательского приложения для ручной навигации и внесения нескольких сотен изменений в имена файлов и папок, которые изменились. Я решил, что было бы лучше внести изменения в файл и папку в XML-файле в CAB, в котором хранятся все настройки. Все это прекрасно сработало в день переключения серверов; иногда нам везет. Слава участнику GitHub, SapientCoder!
PS На случай, если это кому-то поможет, фактическим приложением было Kofax Capture 10.1, а задействованный CAB-файл был CAB-файлом, созданным функцией экспорта Kofax для захвата текущей конфигурации системы Kofax, включая классы пакетной обработки Kofax, классы документов, типы форм, пользователи и назначенные пользователям пакетные классы. Поэтому я постараюсь добавить здесь тег Kofax, если он поможет кому-нибудь найти этот ответ. Используемый XML-файл называется "admin.xml" внутри CAB-файла, созданного исходной системой Kofax. Я изменил кучу ссылок на имена файлов UNC в admin.xml между исходной и целевой установками Kofax, используя функцию поиска и замены NotePad++. Измененный CAB-файл прекрасно работал при целевой "новой" установке Kofax 10.1 на новом сервере, никаких сбоев или проблем.