Search code examples
windowscommand-lineinstallationwindows-installerproperties

How do I add/update a property inside an MSI from the command-line?


I have an MSI installer in which I need to add or modify a short text property from the command-line.

This has to be done after the installer is built; I cannot modify the process that produces the installer in the first place. It also has to be executed headless from a script.

When I say "property," it could be an MSI property, a value that gets written to the registery at install-time, or any other mechanism that can get this short custom text into the installed application when it runs.


Solution

  • Example VBScript that you could use to update (or add) a property post-build...

        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
    

    For more information check out the Windows Installer SDK (part of the Windows SDK)

    There's a bunch of example scripts that you can use from the command line to do various MSI manipulation tasks

    For example WiRunSQL.vbs lets you execute arbitrary SQL against an MSI.