【发布时间】:2012-05-03 20:37:28
【问题描述】:
我想将 MSI 文件读入 MemoryStream(或类似的东西),并对其进行修改。在不破坏 MSI 的情况下,最简单的方法是什么?
我需要做的就是修改 MSI 中某个属性的值。我更喜欢 .Net 中的东西,但我对其他平台持开放态度。
更新:
这是我的工作代码,使用 Windows 平台 SDK、对 Microsoft Windows Installer 对象库和命名空间 WindowsInstaller 的 COM 引用:
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),最好创建一个转换(或者如果属性是公共的,也许只需在命令行上修改它)。
标签: .net windows-installer memorystream