Come faccio ad aggiungere / aggiornare una proprietà all'interno di un MSI dalla riga di comando?
-
05-07-2019 - |
Domanda
Ho un programma di installazione MSI in cui devo aggiungere o modificare una proprietà di testo breve dalla riga di comando.
Questo deve essere fatto dopo che il programma di installazione è stato creato; Non posso in primo luogo modificare il processo che produce il programma di installazione. Deve anche essere eseguito senza testa da uno script.
Quando dico " proprietà, " potrebbe essere una proprietà MSI, un valore che viene scritto nel registro al momento dell'installazione o qualsiasi altro meccanismo in grado di ottenere questo breve testo personalizzato nell'applicazione installata quando viene eseguito.
Soluzione
Esempio VBScript che è possibile utilizzare per aggiornare (o aggiungere) una proprietà 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
Per ulteriori informazioni, consulta l'SDK di Windows Installer (parte di Windows SDK ), ci sono un sacco di script di esempio che puoi usare dalla riga di comando per eseguire varie attività di manipolazione MSI, ad esempio WiRunSQL.vbs
ti consente eseguire SQL arbitrario contro un MSI.
Altri suggerimenti
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
Per ulteriori informazioni, digitare msiexec dalla riga di comando.
EDIT: o modifica il file .msi stesso usando le istruzioni sql e aggiornando la proprietà nella tabella delle proprietà: http://msdn.microsoft.com/en-us/ biblioteca / aa372021 (VS.85) aspx http://msdn.microsoft.com/en-us/ biblioteca / aa368568 (VS.85) aspx
Questo è da aggiungere alla risposta di @saschabeaumont nel '09. Attualmente in uso 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