7

Ho un programma di installazione MSI in cui ho bisogno di aggiungere o modificare una breve proprietà di testo dalla riga di comando.Come aggiungere/aggiornare una proprietà all'interno di un MSI dalla riga di comando?

Questo deve essere fatto dopo la creazione del programma di installazione; Non riesco a modificare il processo che produce l'installer in primo luogo. Deve anche essere eseguito senza testa da una sceneggiatura.

Quando dico "proprietà", potrebbe essere una proprietà MSI, un valore che viene scritto nel registro in fase di installazione o qualsiasi altro meccanismo che può ottenere questo breve testo personalizzato nell'applicazione installata quando viene eseguita.

risposta

12

esempio di VBScript che si potrebbe usare per aggiornare (o aggiungere) un post immobili costruire ...

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 lo SDK di Windows Installer (parte del Windows SDK), c'è un mucchio di script di esempio che è possibile utilizzare dalla riga di comando per fare i vari compiti di manipolazione MSI, ad esempio WiRunSQL.vbs consente di eseguire SQL arbitrario su un MSI.

+2

Non dimenticare di aggiornare il codice del pacchetto nel flusso di informazioni di riepilogo quando si modifica il pacchetto. Mentre è improbabile che la modifica di un valore di una proprietà causi problemi effettivi anche se si rilasciano più file con estensione msi con valori diversi, è comunque necessario farlo. –

+0

Ho appena scoperto che devo aggiornare le informazioni di riepilogo durante la creazione delle trasformazioni, qualsiasi motivo per cui è necessario aggiornare per tutte le modifiche? – saschabeaumont

+0

http://msdn.microsoft.com/en-us/library/aa370568(VS.85).aspx –

5
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty 

per ulteriori informazioni msiexec alla riga di comando.

EDIT: o modificare il file .msi stesso utilizzando le istruzioni SQL e l'aggiornamento della proprietà nella tabella delle proprietà: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

+0

Ho pensato che INSTALLA con una nuova proprietà. Non voglio installare, ho bisogno di MODIFICARE il file MSI. –

+0

Non penso che questo meritasse il downvote, in quanto questo si adatta ai criteri specificati dalla domanda dell'OP. Post-build, è una proprietà MSI ed è sicuramente "qualsiasi altro meccanismo in grado di ottenere questo breve testo personalizzato nell'applicazione installata quando viene eseguita". Non sta alterando il MSI stesso, ma farlo al runtime dell'installatore è effettivamente lo stesso risultato. – SpellingD

+0

@ZippyV Grazie per aver condiviso i link! – Rama

0

Questo è da aggiungere alla risposta di @saschabeaumont nel '09. Attualmente utilizza 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 
+0

Questo non è il codice dotnet. – Crono

+0

in qualche modo l'ultimo postato da @asarenski ha funzionato, ma quello precedente di saschabeaumont non ha apportato modifiche in msi. +1 – Prasoon

Problemi correlati