我有一个MSI安装程序,我需要从命令行添加或修改一个简短的文本属性。
这必须在安装程序build立之后完成; 我无法修改产生安装程序的进程。 它也必须从脚本无头执行。
当我说“属性”时,它可能是一个MSI属性,一个在安装时写入registry的值,或者任何其他机制,在运行时可以将这个简短的自定义文本放到已安装的应用程序中。
示例VBScript,您可以用来更新(或添加)属性后构建…
Option Explicit Const MSI_FILE = "myfile.msi" Dim installer, database, view Set installer = CreateObject("WindowsInstaller.Installer") Set database = installer.OpenDatabase (MSI_FILE, 1) ' Update Set view = database.OpenView ("UPDATE Property SET Value = '" & myproperty & "' WHERE Property = 'MYPROPERTY'") ' .. or Add (Insert) Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & myproperty & "')") view.Execute Set database = Nothing Set installer = Nothing Set view = Nothing
有关更多信息,请查看Windows Installer SDK( Windows SDK的一部分),可以从命令行使用一堆示例脚本来执行各种MSI操作任务,例如WiRunSQL.vbs
可让您针对MSI。
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
有关更多信息,请在命令行中键入msiexec。
编辑:或更改.msi文件本身通过使用sql语句并更新属性表中的属性: http: //msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http:// msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx
这是在09年添加到@saschabeaumont的答案。 目前使用dotNet 4.0
Option Explicit Const MSI_FILE = "myFilePath.msi" Const PROPERTY_STRING_Value = "FooBar" Dim installer, database, view Set installer = CreateObject("WindowsInstaller.Installer") Set database = installer.OpenDatabase (MSI_FILE, 1) ' Update Set view = database.OpenView ("UPDATE Property SET Value = '" & PROPERTY_STRING_Value & "' WHERE Property = 'MYPROPERTY'") ' .. or Add (Insert) Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & PROPERTY_STRING_Value & "')") view.Execute() database.Commit() Set database = Nothing Set installer = Nothing Set view = Nothing