Pregunta

Tengo un instalador de MSI en el que necesito agregar o modificar una propiedad de texto corto desde la línea de comandos.

Esto se debe hacer después de que se haya construido el instalador; No puedo modificar el proceso que produce el instalador en primer lugar. También tiene que ejecutarse sin cabeza desde un script.

Cuando digo " propiedad, " podría ser una propiedad de MSI, un valor que se escribe en el registro en el momento de la instalación, o cualquier otro mecanismo que pueda ingresar este breve texto personalizado en la aplicación instalada cuando se ejecute.

¿Fue útil?

Solución

Ejemplo de VBScript que podría usar para actualizar (o agregar) una propiedad posterior a la compilación ...

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

Para obtener más información, consulte el SDK de Windows Installer (parte de Windows SDK ), hay un montón de scripts de ejemplo que puede usar desde la línea de comandos para realizar varias tareas de manipulación de MSI, por ejemplo, WiRunSQL.vbs le permite Ejecutar SQL arbitrario contra un MSI.

Otros consejos

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

Para obtener más información, escriba msiexec en la línea de comandos.

EDIT: o cambie el archivo .msi utilizando sentencias SQL y actualizando la propiedad en la tabla de propiedades: http://msdn.microsoft.com/en-us/ library / aa372021 (VS.85) .aspx http://msdn.microsoft.com/en-us/ library / aa368568 (VS.85) .aspx

Esto es para agregar a la respuesta de @saschabeaumont en '09. Actualmente utilizando 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top