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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top