0

我正在按照这些步骤从 MSI 中提取文件并对其进行编辑并保留它。但是当我安装新的 MSI 时,它无法在文件柜 (.cab) 中找到文件。

  1. 从 MSI 中提取 cab 文件

    msidb -d "Setup.msi" -x Client.cab

  2. 从 cab 文件中提取文件。

    cabarc X Client.cab *.* C:\ClientExtract\

  3. 编辑文件夹 C:\ClientExtract 中提取的文件

  4. 从修改的文件创建一个新的 cab 文件

    cabarc N Client.cab C:\ClientExtract\*.*

  5. 从 Setup.msi 中删除现有 cab

    msidb -d "Setup.msi" -k Client.cab

  6. 将新创建的 cab 文件添加到 msi

    msidb -d "Setup.msi" -a Client.cab

现在,这个 MSI 文件没有被安装,它说一些文件没有找到。当我只运行第 1、5 和 6 步时,MSI 运行顺畅。我相信问题出在无法维护文件夹结构的 cabarc.exe 上。

任何帮助或替代解决方案将不胜感激。msi2xml 和 xml2msi 有效,但我不能使用它。

4

1 回答 1

0

由于您将此问题标记为 C#,因此我建议使用 DTF 互操作库作为助手编写一个类库。与批处理文件相比,它是一个强大的编程平台。您将使用 Microsoft.Deployment.WindowsInstaller 和 Microsoft.Deployment.Compression.Cab 程序集。

我更喜欢这样做的方式是不理会现有的驾驶室。我创建了一个新的 cab 并将其流式传输。然后我更新文件和媒体表以注册 cab 并取代原始文件。

如果你想给我发一封电子邮件,我可以分享我的入门代码。

于 2013-05-17T11:20:52.423 回答