Отримання публічних властивостей з файлу 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 полягає в тому, що він не вимагає сторонньої утиліти (тобто меншеmsi ), і він не вимагає від вас возитися з будь-якими установками. Зважаючи на те, що у вас є достатньо місця на диску, щоб фактично встановити програму, ви можете зробити:

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

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

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


Проблема цього методу полягає в тому, що ви повинні запустити інсталятор. Навіть якщо ви встановите його на нестандартний targetdir, ви все-таки зіпсували регістри.
Ван

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

Я думаю, що зараз, мабуть, найкращим способом зробити це використання полномочий. Ось сценарій, який виконує цю роботу дуже добре: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


Ця відповідь є лише посиланням, яке може змінюватися / зникати.
Девід Макогон

Є й інші відповіді, які є просто посиланням. Я не відчуваю зручності копіювати та вставляти код інших людей. Я думаю, що моя відповідь дає альтернативний варіант, і я дійсно не розумію голосування проти.
gigi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.