代码之家  ›  专栏  ›  技术社区  ›  Jason Cohen

如何从命令行添加/更新msi内的属性?

  •  8
  • Jason Cohen  · 技术社区  · 16 年前

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

    这必须在安装程序构建之后完成;我不能首先修改生成安装程序的过程。它还必须从脚本中无头执行。

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

    3 回复  |  直到 11 年前
        1
  •  12
  •   saschabeaumont    16 年前

    可用于更新(或添加)属性后期生成的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。

        2
  •  5
  •   ZippyV    16 年前
    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

        3
  •  0
  •   asarenski    11 年前

    这是对09年@saschabaumont答案的补充。当前使用的是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
    
    推荐文章