Comment ajouter / mettre à jour une propriété dans un fichier MSI à partir de la ligne de commande?
-
05-07-2019 - |
Question
J'ai un programme d'installation MSI dans lequel je dois ajouter ou modifier une propriété de texte court à partir de la ligne de commande.
Ceci doit être fait après la construction du programme d'installation. Je ne peux pas modifier le processus qui produit l'installateur en premier lieu. Il doit également être exécuté sans script à partir d’un script.
Quand 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 lors de son exécution.
La solution
Exemple de code VBScript que vous pouvez utiliser pour mettre à jour (ou ajouter) une propriété post-génération ...
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 Kit de développement logiciel (SDK) Windows Installer (élément du Kit de développement logiciel Windows ), de nombreux exemples de scripts que vous pouvez utiliser à partir de la ligne de commande pour effectuer diverses tâches de manipulation MSI, par exemple WiRunSQL.vbs
vous permettent de: exécuter du SQL arbitraire contre un MSI.
Autres conseils
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
Pour plus d'informations, tapez msiexec sur la ligne de commande.
EDIT: ou modifiez le fichier .msi lui-même en utilisant les instructions SQL et en mettant à jour la propriété dans la table des propriétés: http://msdn.microsoft.com/en-us/ bibliothèque / aa372021 (VS.85) .aspx http://msdn.microsoft.com/en-us/ bibliothèque / aa368568 (VS.85) .aspx
Ceci est à ajouter à la réponse de @saschabeaumont en 09. Utilise 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