Чи є інструмент чи механізм для отримання доступних загальнодоступних властивостей з файлу MSI Windows?
Деякі постачальники, які постачають файли MSI, не документують їх самі, тому мені цікаво дізнатись, чи є спосіб викрити їх без вихідного коду.
Чи є інструмент чи механізм для отримання доступних загальнодоступних властивостей з файлу MSI Windows?
Деякі постачальники, які постачають файли MSI, не документують їх самі, тому мені цікаво дізнатись, чи є спосіб викрити їх без вихідного коду.
Відповіді:
Lessmsi забезпечує командний рядок, а також інтерактивну програму для отримання будь-якого атрибуту з .msi.
В інтерактивному режимі відкрийте .msi, потім перейдіть до подання таблиці та виберіть або введіть "Властивість". Однак, хоча це дає назви властивостей, воно не дає дійсних значень для вказаної властивості. (Або я не знайшов потрібного місця для пошуку.)
Командний рядок, щоб перерахувати таблицю властивостей для консолі (розчарування, не може бути захоплено простим > output.csv
переадресацією)
lessmsi l -t Property ...\path\to\setup.msi
Враховуючи, що MSI-файл зберігає загальнодоступні властивості у внутрішній базі даних, ви можете насправді просто запитувати їх за допомогою VBScript та SQL.
Ось приклад сценарію, який поверне всі властивості, збережені у файлі MSI. Конвенція використовувати великі літери для визначення загальнодоступних властивостей, так що зазвичай їх можна ідентифікувати.
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>
можливо, деякі властивості не вистачать.
Я зараз роблю це за допомогою модуля 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
Я думаю, що зараз, мабуть, найкращим способом зробити це використання полномочий. Ось сценарій, який виконує цю роботу дуже добре: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c
Property
таблицю. Чи були у вас специфічні робочі потоки чи випадки використання поза межами MSI?