Como posso adicionar / atualizar uma propriedade dentro de um MSI da-line de comando?
-
05-07-2019 - |
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.
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