我有一个MSI安装程序,我需要在命令行中添加或修改短文本属性。
必须在构建安装程序后完成此操作;我无法首先修改生成安装程序的过程。它也必须从脚本执行无头。
当我说“属性”时,它可能是一个MSI属性,一个在安装时写入注册表的值,或任何其他机制,可以在运行时将这个简短的自定义文本放入已安装的应用程序中。 / p>
答案 0 :(得分:12)
可用于在构建后更新(或添加)属性的示例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操作任务,例如{{1}允许您对MSI执行任意SQL。
答案 1 :(得分:5)
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
有关更多信息,请在命令行键入msiexec。
编辑:或者通过使用sql语句并更新属性表中的属性来更改.msi文件本身: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx
答案 2 :(得分:0)
这是为了添加@saschabeaumont在09年的回答。目前使用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