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

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

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

有帮助吗?

解决方案

可用于在构建后更新(或添加)属性的示例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执行任意SQL。

其他提示

c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty

有关更多信息,请在命令行键入msiexec。

编辑:或者通过使用sql语句并更新属性表中的属性来更改.msi文件本身: http://msdn.microsoft.com/en-us/库/ aa372021(VS.85)的.aspx http://msdn.microsoft.com/en-us/库/ 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top