Wie füge ich / aktualisieren eine Eigenschaft innerhalb eines MSI aus der Befehlszeile?
-
05-07-2019 - |
Frage
Ich habe einen MSI-Installer, in dem ich brauche eine kurze Text Eigenschaft aus der Befehlszeile hinzuzufügen oder zu ändern.
Dies muss getan werden, nachdem der Installer erstellt wird; Ich kann nicht den Prozess ändern, die das Installationsprogramm in erster Linie produziert. Es hat auch von einem Skript ausgeführt kopflos werden.
Als ich „Eigenschaft“, sagen könnte es sich um eine MSI-Eigenschaft sein, ein Wert, der auf die registery geschrieben wird zum Installationszeitpunkt oder einen anderen Mechanismus, der diese kurze benutzerdefinierten Text in der installierten Anwendung erhalten können, wenn es ausgeführt wird.
Lösung
Beispiel VBScript, dass Sie aktualisieren verwenden, um könnten (oder hinzufügen) eine Eigenschaft Postbuild ...
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
Für weitere Informationen besuchen Sie das Windows Installer SDK (Teil der Windows SDK ), gibt es eine Reihe von beispiel~~POS=TRUNC, die Sie von der Kommandozeile können Sie verschiedene MSI Manipulationsaufgaben tun, zum Beispiel WiRunSQL.vbs
können Sie beliebige SQL gegen einen MSI auszuführen.
Andere Tipps
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
Für weitere Informationen geben Sie in der Kommandozeile msiexec.
EDIT: oder die MSI-Datei ändern sich von SQL-Anweisungen und die Eigenschaft in der Eigenschaftstabelle zu aktualisieren: http://msdn.microsoft.com/en-us/ Bibliothek / aa372021 (VS.85) ASPX- http://msdn.microsoft.com/en-us/ library / aa368568 (VS.85) aspx
Dies ist hinzuzufügen ‚s Antwort auf '09 zu @saschabeaumont. Derzeit verwenden 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