Pergunta

Eu tenho um instalador MSI em que eu preciso adicionar ou modificar uma propriedade de texto curtas a partir da linha de comando.

Isto tem que ser feito depois que o instalador é construído; Não posso modificar o processo que produz o instalador em primeiro lugar. Ele também tem que ser executado sem cabeça de um script.

Quando eu digo "propriedade", que poderia ser uma propriedade MSI, um valor que é gravado no registery no momento da instalação, ou qualquer outro mecanismo que pode começar este texto personalizado curto para o aplicativo instalado quando ele é executado.

Foi útil?

Solução

Exemplo VBScript que você poderia usar para atualização (ou adicionar) uma propriedade pós-compilação ...

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 mais informações confira o SDK do Windows Installer (parte do Windows SDK ), há um monte de exemplos de scripts que você pode usar na linha de comando para fazer várias tarefas de manipulação MSI, por exemplo WiRunSQL.vbs permite executar SQL arbitrárias contra um MSI.

Outras dicas

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

Para obter mais informações tipo msiexec na linha de comando.

EDIT: ou alterar o próprio arquivo .msi usando instruções SQL e atualizar a propriedade na tabela de propriedades: http://msdn.microsoft.com/en-us/ biblioteca / aa372021 (VS.85) .aspx http://msdn.microsoft.com/en-us/ biblioteca / aa368568 (VS.85) .aspx

Esta é adicionar o @saschabeaumont 's resposta em '09. Atualmente usando 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top