9
votes

Comment ajouter / mettre à jour une propriété à l'intérieur d'un MSI à partir de la ligne de commande?

J'ai un installateur MSI dans lequel je dois ajouter ou modifier une propriété de texte courte à partir de la ligne de commande.

Cela 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 tête d'un script.

Quand je dis "propriété", il pourrait s'agir d'une propriété MSI, une valeur qui est écrite dans le tableau à l'installation ou tout autre mécanisme pouvant obtenir ce court texte personnalisé dans l'application installée lorsqu'elle s'exécute. < / p>


0 commentaires

3 Réponses :


4
votes
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(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

2 commentaires

Je pensais que cela s'installe avec une nouvelle propriété. Je ne veux pas installer, je dois modifier le fichier MSI.


Je ne pense pas que cela méritait le bowvote, car cela correspond aux critères spécifiés par la question de OP. Post-Build, est une propriété MSI et est certainement "tout autre mécanisme qui peut obtenir ce court texte personnalisé dans l'application installée lorsqu'elle s'exécute". Cela ne modifie pas le MSI lui-même, mais cela au moment de l'exécution de l'installateur est effectivement le même résultat.



12
votes

Exemple VBScript que vous pouvez utiliser pour mettre à jour (ou ajouter) une propriété post-build ... xxx

Pour plus d'informations, consultez le programme d'installation de Windows SDK (une partie du Windows SDK )

Il y a un groupe d'exemples de scripts que vous pouvez utiliser à partir de la ligne de commande pour faire diverses tâches de manipulation MSI

par exemple wirunsql.vbs permet d'exécuter SQL arbitraire contre un MSI .


4 commentaires

N'oubliez pas de mettre à jour le code de paquet dans le flux d'informations récapitulatif lorsque vous modifiez le package. Lors de la modification de la valeur de la propriété, il est peu probable que des problèmes réels, même si vous publiez plusieurs fichiers .msi avec différentes valeurs, c'est toujours quelque chose que vous devez faire.


J'ai seulement constaté que je dois mettre à jour les informations récapitulatives lors de la création de Transforms, une raison pour laquelle vous devez mettre à jour pour tous les changements?


Je ne peux même pas mettre à jour une variable avec ce script et obtenir une erreur d'exécution "La variable est indéfinie". J'ai vérifié dans ORCA la propriété est définie.


Je sais que c'est vieux mais modifié pour ajouter de la base de données.chit.



1
votes

Ceci est à ajouter à la réponse de @saschabeaMont dans '09. En utilisant 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


2 commentaires

En quelque sorte, la dernière dernière publiée par @asarenski a travaillé, mais la précédente de SaschabeaMont n'a fait aucun changement de MSI. +1


En effet, @saschabeaMont a oublié d'ajouter base de données.commit ()