5

我知道有一个类似的问题,但标记的答案提供了一个指向外部库的链接,该库需要在用户的机器上安装多个依赖项。

我不需要提取或任何其他喜欢列出文件的东西 - 我只需要将文件夹的全部内容添加到单个压缩文件中。我知道cabinet.dll 存在于\Windows\System32 文件夹中,我希望有一种简单的方法可以与这个DLL 进行交互以实现我想要做的事情。

没有外部库可以做到这一点吗?如果有人能指出我正确的方向,我将永远感激不尽。

4

2 回答 2

10

您可以查看WiX,更具体地说是Microsoft.Deployment.Compression.Cab程序集。它有一个很好的 API 允许你这样做:

CabInfo cab = new CabInfo(@"c:\Work\some.cab"); 
cab.Pack(@"C:\Work\folder");

它依赖于Microsoft.Deployment.Compression独立的程序集,因此您只需要这两个程序集。

于 2009-12-21T14:45:09.070 回答
0

上周我需要为一个项目创建一个 CAB 文件。我真正想做的是替换现有 CAB 文件中的单个 XML 文件,保留 CAB 中的文件夹结构。我很快了解到,没有简单的 7Zip 或 WinZip 方法可以做到这一点,成功的途径是生成一个新的 CAB 文件,其中包含我想要的修改文件。这个从文件夹中的所有文件创建 CAB 文件的工具对我来说效果很好。它是 MakeCab 实用程序的 GUI 前端,它在此处描述: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 

此扩展命令提取了我的 CAB 文件中的所有文件,并将它们放在文件夹 CabSourceFiles 中,保留文件夹结构。

现在,我们已准备好运行 CabMaker GUI 来创建我们的 CAB 文件。请注意,这是一个仅包含文件和文件夹的“普通”CAB 文件,而不是具有额外标题的文件和一组安装程序文件的一部分。

我只是下载了 CabMaker C# 代码并在 Visual Studio 2019 中运行它。GUI 出现了。我输入了我的源文件夹(扩展命令中的输出文件夹)、我的目标文件夹(放置生成的 CAB 文件的位置)和我想要的 CAB 文件名,然后单击“制作 CAB”按钮,它运行了。生成的 CAB 文件运行良好,并成功导入应用程序并正确设置了配置。

CabMaker GUI 屏幕截图

好的,那为什么我需要制作一个 CAB 文件呢?好吧,我们正在将供应商应用程序从旧服务器迁移到新服务器,并使用应用程序的“导出”功能来捕获我们可以“导入”到新服务器上的应用程序的当前状态配置文件。另一种方法是使用消费者应用程序笨拙的 GUI 手动导航并对已更改的文件和文件夹名称进行数百次更改。我决定最好在包含所有设置的 CAB 中的 XML 文件中进行文件和文件夹更改。在服务器切换日这一切都很顺利;有时我们很幸运。向 GitHub 贡献者 SapientCoder 致敬!

PS 如果对大家有帮助,实际的应用是 Kofax Capture 10.1,涉及的 CAB 文件是 Kofax 的导出功能创建的 CAB 文件,用于捕获 Kofax 系统的当前配置,包括 Kofax 批处理类、文档类、表单类型、用户和批次类分配的用户。因此,我将尝试在此处添加 Kofax 标签,以帮助有需要的人找到此答案。涉及的 XML 文件在源 Kofax 系统生成的 CAB 文件中被命名为“admin.xml”。我使用 NotePad++ 查找和替换在源和目标 Kofax 安装之间更改了 admin.xml 中的一堆 UNC 文件名引用。修改后的 CAB 文件在新服务器上的目标“新”Kofax 10.1 安装上运行良好,完全没有打嗝或问题。

于 2020-01-14T04:14:59.737 回答