⚙️ Как вычислить недокументированные свойства пакета MSI
У MSI есть ключи вроде /qn для тихой установки, а есть свойства вида TARGETDIR для указания папки установки. Вечнозеленый гайд 2009 года с сайта автоустановки быстро вводит в курс дела.
Бывает так, что при интерактивной установке вы видите разные опции и хотите автоматизировать их выбор при установке. Но свойства не всегда описаны в документации к программе.
👉 В таком случае поможет полезный трюк: ключ /lp! установщика Windows, записывающий все свойства в журнал.
Возьмем для примера PowerShell Core. Алгоритм простой.
1. В PowerShell перейдите в папку с пакетом и выполните команду (с поправкой на версию):
.\PowerShell-7.3.2-win-x64.msi /lp! "$env:temp\prop.txt"
2. На каждом экране установщика отметьте все доступные опции, иначе свойства могут не попасть в лог.
3. Пройдите все экраны до последнего и отмените установку полностью - закройте инсталлятор.
4. Откройте файл prop.txt.
Свойства записываются заглавными буквами, поэтому сразу бросаются в глаза. На скриншоте в логе отражены семь свойств из GUI - пять с показанного экрана и два со следующего. Желтым выделены свойства, которые не заданы по умолчанию. В логе их значения 0, но при установке следует указывать 1.
Пример автоматической установки с прогрессом, но без возможности отмены (/qb-!), и добавлением двух пунктов в контекстное меню. Это одна строка:
msiexec.exe /package PowerShell-7.3.2-win-x64.msi /qb-! ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ADD_FILE_CONTEXT_MENU_RUNPOWERSHELL=1
Кстати, разработчики PowerShell любезно задокументировали свойства своего пакета. Поэтому можно проверить эффективность трюка с записью в журнал. Спойлер: в лог попали все свойства 😎