我想讀取一個MSI文件到一個MemoryStream(或類似的),並修改它。在不影響MSI的情況下,最簡單的方法是什麼?如何修改內存中的MSI?
我需要做的就是修改MSI中某個屬性的值。我更喜歡.Net中的某些東西,但我對其他平臺開放。
更新:
這是我工作的代碼,使用Windows平臺的SDK,一個COM參考Microsoft Windows安裝程序對象庫和命名空間WindowsInstaller:
Installer installer = Activator.CreateInstance(Type.GetTypeFromProgID("WindowsInstaller.Installer")) as Installer;
Database msi = installer.OpenDatabase("WixTest.msi", MsiOpenDatabaseMode.msiOpenDatabaseModeTransact);
View view = msi.OpenView("update `Property` SET `Property`.`Value`='99' where `Property`='USERID'");
view.Execute(null);
msi.Commit();
當您要進行此更改時,有點不清楚。如果在分發MSI之前,修改它可能沒問題。如果它是從其他地方獲得的(或者是從其他地方獲得的MSI),最好創建一個轉換(或者如果該屬性是公共的,也許只是在命令行中修改它)。 – 2010-03-04 14:34:01