Comment append / mettre à jour une propriété dans un fichier MSI à partir de la ligne de commande?

J’ai un programme d’installation MSI dans lequel je dois append ou modifier une propriété de texte court à partir de la ligne de commande.

Cela doit être fait après la construction de l’installateur; Je ne peux pas modifier le processus qui produit l’installateur en premier lieu. Il doit également être exécuté sans tête à partir d’un script.

Lorsque je dis “propriété”, il peut s’agir d’une propriété MSI, d’une valeur écrite dans le registre lors de l’installation ou de tout autre mécanisme permettant d’obtenir ce court texte personnalisé dans l’application installée.

Exemple de VBScript que vous pouvez utiliser pour mettre à jour (ou append) une propriété après la construction …

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 

Pour plus d’informations, consultez le SDK Windows Installer (partie du SDK Windows ), vous pouvez utiliser un grand nombre d’exemples de scripts à partir de la ligne de commande pour effectuer diverses tâches de manipulation MSI. Par exemple, WiRunSQL.vbs vous permet d’exécuter du SQL arbitraire MSI.

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

Pour plus d’informations, tapez msiexec à la ligne de commande.

EDIT: ou modifiez le fichier .msi lui-même en utilisant des instructions SQL et en mettant à jour la propriété dans la table des propriétés: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http: // msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

Ceci est à append à la réponse de @saschabeaumont en 2009. Utiliser actuellement 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