Как добавить / обновить свойство внутри MSI из командной строки?

StackOverflow https://stackoverflow.com/questions/1609250

Вопрос

У меня есть установщик 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top