2013-05-17 61 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