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

问题描述 投票:8回答:3

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

这必须在安装程序建立后进行,我不能修改一开始产生安装程序的过程。 它还必须从脚本中无头执行。

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

windows command-line installer windows-installer properties
3个回答
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
    database.Commit

    Set database = Nothing
    Set installer = Nothing
    Set view = Nothing

更多信息请查看Windows安装程序SDK (Windows Installer SDK的一部分) Windows SDK)

有一堆脚本示例,你可以在命令行中使用这些脚本来完成各种MSI操作任务。

比如说 WiRunSQL.vbs 让你可以对MSI执行任意SQL。


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

更多信息请在命令行输入msiexec。

编辑:或者通过使用sql语句和更新属性表中的属性来改变.msi文件本身。http:/msdn.microsoft.comen-uslibraryaa372021(VS.85).aspx。http:/msdn.microsoft.comen-uslibraryaa368568(VS.85).aspx。


1
投票

这是对@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
© www.soinside.com 2019 - 2024. All rights reserved.