【问题标题】:Update a file inside existing MSI更新现有 MSI 中的文件
【发布时间】:2013-05-17 10:51:36
【问题描述】:

我正在按照这些步骤从 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 有效,但我不能使用它。

【问题讨论】:

  • 我也试过了,但没有帮助
  • 是的,我可以删除 cab 文件。我的意思是我删除了然后我创建了新的cabinet文件。

标签: c# windows windows-installer cab


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我同意你的观点,我也开始使用 C# 编码。我的第一种方法是使用其他 C# 的 WinSDk 工具。请分享您的代码,它也可能对我的代码有所帮助。
  • 这是一个完整的项目解决方案。不是我可以粘贴到答案中的东西。给我发一封电子邮件(我很容易找到)并从 wix.codeplex.com 下载所需的 SDK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2019-06-06
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多