Как добавить / обновить свойство внутри MSI из командной строки?
-
05-07-2019 - |
Вопрос
У меня есть установщик MSI, в котором мне нужно добавить или изменить свойство короткого текста из командной строки.
Это должно быть сделано после сборки установщика; Я не могу изменить процесс, который производит установщик в первую очередь. Он также должен выполняться без сценария.
Когда я говорю «свойство», это может быть свойство MSI, значение, которое записывается в регистр во время установки, или любой другой механизм, который может передать этот короткий пользовательский текст в установленное приложение при его запуске.
Решение
Пример VBScript, который вы можете использовать для обновления (или добавления) свойства после сборки ...
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
Для получения дополнительной информации посмотрите SDK установщика Windows (часть Windows SDK ), есть несколько примеров сценариев, которые вы можете использовать из командной строки для выполнения различных задач MSI, например WiRunSQL.vbs
позволяет выполнить произвольный SQL для MSI.
Другие советы
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
Для получения дополнительной информации введите msiexec в командной строке.
РЕДАКТИРОВАТЬ: или изменить сам MSI-файл, используя операторы sql и обновив свойство в таблице свойств: http://msdn.microsoft.com/en-us/ библиотека / aa372021 (VS.85) .aspx http://msdn.microsoft.com/en-us/ библиотека / aa368568 (VS.85) .aspx р>
Это добавить к ответу @saschabeaumont в '09. В настоящее время используется 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