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

Jas*_*hen 8 windows installer command-line windows-installer properties

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

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

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

sas*_*ont 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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看Windows Installer SDK(Windows SDK的一部分),您可以从命令行使用大量示例脚本来执行各种MSI操作任务,例如,WiRunSQL.vbs允许您针对MSI执行任意SQL.

  • 更改包时,请不要忘记更新摘要信息流中的包代码.虽然更改属性值不太可能导致实际问题,即使您使用不同的值释放多个.msi文件,它仍然是您需要做的事情. (2认同)

Zip*_*pyV 5

c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请在命令行键入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

  • 我认为这不值得投反对票,因为这符合 OP 问题指定的标准。构建后,是 MSI 属性,当然是“任何其他机制,可以在运行时将此简短的自定义文本放入已安装的应用程序中”。它不会改变 MSI 本身,但在安装程序的运行时执行此操作实际上是相同的结果。 (2认同)