views:

587

answers:

2

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.

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

For more information type msiexec at the commandline.

EDIT: or change the .msi file itself by using sql statements and updating the property in the properties table: http://msdn.microsoft.com/en-us/library/aa372021%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/aa368568%28VS.85%29.aspx

ZippyV
I thought that INSTALLS with a new property. I don't want to install, I need to MODIFY the MSI file.
Jason Cohen
+2  A: 

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


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.

sascha
Don't forget to update the package code in the Summary Information Stream when you change the package. While changing a property value is unlikely to cause actual problems even if you release multiple .msi files with different values, it's still something you need to do.
Michael Urman
I've only found that I need to update the Summary Information when creating transforms, any reason why you need to update for all changes?
sascha
http://msdn.microsoft.com/en-us/library/aa370568(VS.85).aspx
Evan Larkin