Получение открытых свойств из файла MSI

12

Существует ли инструмент или механизм для извлечения доступных общедоступных свойств из файла MSI Windows?

Некоторые поставщики, которые предоставляют MSI-файлы, сами не документируют их, поэтому мне любопытно посмотреть, есть ли способ представить их без исходного кода.

Кен Барбер
источник
8
ORCA от Microsoft , SuperORCA от Pantaray и большинство других редакторов MSI позволит вам просматривать / редактировать любую таблицу, включая Propertyтаблицу. Был ли у вас какой-то конкретный рабочий процесс или сценарий использования за пределами MSI?
Jscott
2
Я хотел понять доступные общедоступные свойства, чтобы они могли быть точно переданы во время установки, без необходимости обращаться к поставщику или к документации (поскольку это не всегда возможно). С Puppet мы можем передать свойства MSI во время установки (мы обертываем misexec.exe), так что это удобно иметь эту возможность.
Кен Барбер
1
Могут быть и другие открытые свойства, которые вы можете передать для управления установкой, хотя они не перечислены в таблице свойств. Свойства могут быть установлены динамически в зависимости от условия, например, поиска в реестре. Таким образом, документация поставщика является лучшим источником информации.
Алексей Иванов
Вы также можете запустить установку с подробным ведением журнала, чтобы увидеть, как свойства изменяют свои значения.
Алексей Иванов
Извините за задержку - я пробовал Orca и его увлекательное, но я подтвердил поведение, которое вы описываете @AlexeyIvanov - то есть некоторые свойства не появятся. Я подтвердил это с помощью splunk.msi и его документов. Я предполагаю, что те, которые появляются в Orca, имеют значения по умолчанию, но это не канонический список. Можете ли вы объяснить немного больше о методологии подробного ведения журнала?
Кен Барбер

Ответы:

8

Lessmsi предоставляет командную строку, а также интерактивное приложение для извлечения любого атрибута из .msi.

В интерактивном режиме откройте MSI, затем перейдите к представлению таблицы и выберите или введите «Свойство». Однако, хотя это дает имена свойств, оно не дает действительных значений для указанного свойства (или я не нашел подходящего места для поиска.)

Командная строка для вывода таблицы свойств на консоль (к сожалению, не может быть захвачена простым > output.csvперенаправлением)

lessmsi l -t Property ...\path\to\setup.msi
Мэтт Уилки
источник
1

Учитывая, что MSI-файл хранит открытые свойства во внутренней базе данных, вы можете просто запросить их, используя VBScript и SQL.

Вот пример сценария , который вернет все свойства, хранящиеся в файле MSI. Для определения общедоступных свойств принято использовать заглавные буквы, поэтому их обычно можно идентифицировать.

Джеймс Хебден
источник
1

Lessmsi - отличный инструмент, который, безусловно, работает здесь, если вы хотите открыть его графический интерфейс и провести ручное исследование. Тем не менее, я скажу, что следующая команда не может достоверно представить все свойства:

lessmsi l -t Property <msi_name>

Один из способов (лучше) гарантировать, что вы получите все возможные свойства, - это выполнить установку, восстановить или удалить файл MSI и зарегистрировать процесс. Следующая команда записывает только свойства и ничего больше:

<msi_name> /lp! <msi_property_logfile>

Вышеуказанная команда эквивалентна:

msiexec /lp! <msi_property_logfile> /i <msi_name>

Мой предпочтительный метод, однако, заключается в том, чтобы на самом деле не устанавливать / удалять / восстанавливать (а просто извлекать вместо этого). Преимущества этого метода по сравнению с lessmsi состоят в том, что для него не требуется сторонняя утилита (например, lessmsi ) и не требуется возиться с какими-либо установками. Учитывая, что у вас достаточно дискового пространства для фактической установки программы, вы можете сделать:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

Обратите внимание, что <absolute_path_to_extract_to>может указывать на несуществующий каталог (команда создаст необходимые каталоги или потерпит неудачу).

Если по какой-либо причине вы ненавидите пользовательский интерфейс установки, вы можете добавить /qrопцию, которая «уменьшит» и, возможно, исключит пользовательский интерфейс без ущерба для процесса регистрации свойств. Однако, будьте осторожны - если вы пойдете «ниже», чем сокращенный пользовательский интерфейс (то есть. /qb| /passiveИли /qn| /quiet), <msi_property_logfile>возможно , вам не хватает некоторых свойств.

YenForYang
источник
Проблема этого метода заключается в следующем: вы должны запустить программу установки. Даже если вы установите его в нестандартный таргетинг, вы все равно испортили регистры.
Ван
0

Теперь я делаю это с помощью модуля Carbon Powershell. Для установки модуля введите:

Install-Module -Name 'Carbon' -AllowClobber

Тогда просто

msi your_msi_path.msi

Пример:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2
Гиги
источник
-1

Я думаю, что сейчас, вероятно, лучший способ сделать это - использовать powershell. Вот скрипт, который действительно хорошо справляется со своей задачей: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c

Гиги
источник
Этот ответ - просто ссылка, которая может измениться / исчезнуть.
Дэвид Макогон,
Есть и другие ответы, которые являются просто ссылкой. Я не чувствую себя комфортно, копируя и вставляя код других людей. Я думаю, что мой ответ дает альтернативный вариант, и я действительно не понимаю отрицательный голос.
Гиги