如何从命令行添加/更新MSI中的属性?

时间:2009-10-22 18:51:07

标签: windows command-line installer windows-installer properties

我有一个MSI安装程序,我需要在命令行中添加或修改短文本属性。

必须在构建安装程序后完成此操作;我无法首先修改生成安装程序的过程。它也必须从脚本执行无头。

当我说“属性”时,它可能是一个MSI属性,一个在安装时写入注册表的值,或任何其他机制,可以在运行时将这个简短的自定义文本放入已安装的应用程序中。 / p>

3 个答案:

答案 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