更新现有MSI内的文件

时间:2013-05-17 10:51:36

标签: c# windows windows-installer cab

我按照以下步骤从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. 中的解压缩文件
  5. 从修改过的文件中创建一个新的cab文件

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

  6. 从Setup.msi

    中删除现有的cab

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

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

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

  8. 现在,这个MSI文件没有安装,并且说没有找到某个文件。 当我只运行步骤1,5和6时,MSI可以顺利运行。我相信问题将出在cabarc.exe,它无法维护文件夹结构。

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

1 个答案:

答案 0 :(得分:0)

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

我喜欢这样做的方法是单独留下现有的驾驶室。我创建了一个新的cab并将其流入。然后我更新了File和Media表以注册cab并取代原始文件。

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