Как добавить / обновить свойство внутри MSI из командной строки? - PullRequest
8 голосов
/ 22 октября 2009

У меня есть установщик MSI, в котором мне нужно добавить или изменить свойство короткого текста из командной строки.

Это необходимо сделать после сборки установщика;Я не могу изменить процесс, который производит установщик в первую очередь.Это также должно выполняться без скрипта.

Когда я говорю «свойство», это может быть свойство MSI, значение, которое записывается в регистр во время установки, или любой другой механизм,получите этот короткий пользовательский текст в установленное приложение при запуске.

Ответы [ 3 ]

12 голосов
/ 23 октября 2009

Пример 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.

5 голосов
/ 22 октября 2009
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty

Для получения дополнительной информации введите msiexec в командной строке.

РЕДАКТИРОВАТЬ: или изменить сам MSI-файл, используя операторы sql и обновив свойство в таблице свойств: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

0 голосов
/ 17 августа 2015

Это добавится к ответу @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
...