2013-05-17 42 views
0

我按照以下步骤从MSI中提取文件并对其进行编辑并将其保留。但是当我安装新的MSI时,它无法找到内部文件(.cab)中的文件。更新现有MSI中的文件

  1. 从MSI

    解压CAB文件

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

  2. 提取从CAB文件中的文件。

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

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

  4. 从修改后的文件

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

  5. 取下安装在现有的驾驶室创建一个新的CAB文件。 msi

    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的作品,但我不能使用它。

+0

我试过了,但它并没有帮助 – PawanS

+0

是的,我可以删除cab文件。我的意思是我删除了,然后我创建了新的文件柜。 – PawanS

回答

0

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

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

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

+0

是的,我同意你的看法,我也开始使用C#编写代码。我的第一种方法是使用WinSDk工具或其他C#。请分享您的代码,这可能也有助于我的代码。 – PawanS

+0

这是一个完整的项目解决方案。不是我可以粘贴到答案中的东西。给我发一封电子邮件(我很容易找到)并从wix.codeplex.com下载所需的SDK。 –

+0

[email protected] – PawanS