Предложение : Я не парень из Python (не каламбур), но мне нравится грабить github.com всякий раз, когда мне нужно что-то подобное. Вот что я нашел . И поиск github.com произвольно устанавливается на страницу 21 .
import msilib
#import sys
db = msilib.OpenDatabase("setup.msi", msilib.MSIDBOPEN_READONLY)
print( db.GetSummaryInformation(0).GetProperty(7))
Битность : Информация о битности сохраняется в Summary Information Stream
для MSI, и оно называется значением Template
.You must parse it to determine if it is a 64-bit package
. Допустимые значения описаны здесь .Существует несколько разновидностей 64-битных процессоров.Просто отсканируйте для x64
, Intel64
, ARM64
в зависимости от ситуации - x64
является наиболее распространенным для настольных компьютеров(Я верю). Посмотрите, как это делает Advanced Installer .
64-битный флаг компонента : реальная раздача для 64-битного пакетачто любые компоненты, помеченные как msidbComponentAttributes64bit
(что добавляет 256
, 0x0100
к флагу атрибута) в столбце Атрибуты таблицы компонентов в Таблица компонентов означает, что пакет MSI должен быть 64-разрядным для поддержки таких компонентов.
MSI SDK : Я также упомяну, что MSI SDK бинарный MsiInfo.exe
(%ProgramFiles(x86)%\Windows Kits
) может легко прочитать значение шаблона, и пример MSI API WiSumInf.vbs
может сделать то же самое.
Образец CMD :
MsiInfo.exe Test.msi
и
cscript.exe WiSumInf.vbs Test.msi
Дополнительные ссылки: