7

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

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

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

ответ

12

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

для получения дополнительной информации ознакомьтесь с установщика Windows SDK (часть Windows SDK), есть куча примеров сценариев, которые можно использовать из командной строки для выполнения различных задач манипулирования MSI, например, WiRunSQL.vbs позволяет выполнять произвольный SQL-запрос на MSI.

+2

Не забывайте обновлять код пакета в Сводном информационном потоке при изменении пакета. Хотя изменение значения свойства вряд ли вызовет реальные проблемы, даже если вы отпустите несколько файлов .msi с разными значениями, вам все же нужно что-то сделать. –

+0

Я обнаружил, что мне нужно обновить сводную информацию при создании трансляций, по какой причине вам необходимо обновить все изменения? – saschabeaumont

+0

http://msdn.microsoft.com/en-us/library/aa370568(VS.85).aspx –

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

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

EDIT: или изменить сам файл .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

Я думал, что УСТАНАВЛИВАЕТСЯ новый объект. Я не хочу устанавливать, мне нужно ИЗМЕНИТЬ файл MSI. –

+0

Я не думаю, что это заслужило нисходящее движение, так как это соответствовало критериям, заданным вопросом ОП. Post-build, является свойством MSI и, безусловно, является «любым другим механизмом, который может получить этот короткий пользовательский текст в установленное приложение во время его запуска». Это не изменяет сам MSI, но выполнение этого во время выполнения установщика является фактически одним и тем же результатом. – SpellingD

+0

@ZippyV Спасибо, что поделились ссылками! – Rama

0

Это нужно добавить к ответу @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 
+0

Это не код dotnet. – Crono

+0

как-то последний опубликовал by @asarenski, но предыдущий один от saschabeaumont не внес изменений в msi. +1 – Prasoon

Смежные вопросы