msilib — Чтение и запись файлов установщика Microsoft¶
Исходный код: Lib/msilib/__init__.py
msilib поддерживает создание файлов Microsoft Installer (.msi).
Поскольку эти файлы часто содержат встроенный CAB-файл (.cab), они также
предоставляют API для создания CAB-файлов. Поддержка чтения файлов .cab в
настоящее время не реализована; возможна поддержка чтения для базы данных
.msi.
Этот пакет предназначен для обеспечения полного доступа ко всем таблицам в файле
.msi, поэтому является довольно низкоуровневое API. Два основных применения
этого пакета - команда distutils bdist_msi и создание самого пакета
инсталлятора Python (хотя это в настоящее время использует другую версию
msilib).
Содержание пакета может быть примерно разделено на четыре части: установленный порядок CAB низкоуровневое, установленный порядок низкоуровневое MSI, высокоуровневый установленный порядок MSI и стандартные структуры таблиц.
-
msilib.FCICreate(cabname, files)¶ Создать новый CAB-файл с именем cabname. files должен быть список кортежей, каждый из которых содержит имя файла на диске и имя файла в CAB-файле.
Файлы добавляются в CAB-файл в том порядке, в котором они отображаются в списке. Все файлы добавляются в один CAB-файл с использованием алгоритма сжатия MSZIP.
Обратные вызовы Python для различных шагов создания MSI в настоящее время не отображаются.
-
msilib.UuidCreate()¶ Возвращает представление строки нового уникального идентификатора. При этом оборачиваются функции Windows API
UuidCreate()иUuidToString().
-
msilib.OpenDatabase(path, persist)¶ Возвращает новый объект базы данных путем вызова MsiOpenDatabase. path - имя файла MSI; persist может быть одной из констант
MSIDBOPEN_CREATEDIRECT,MSIDBOPEN_CREATE,MSIDBOPEN_DIRECT,MSIDBOPEN_READONLYилиMSIDBOPEN_TRANSACTи может включать флагMSIDBOPEN_PATCHFILE. Значение этих флагов см. в документации корпорации майкрософт; в зависимости от флагов открывается существующая база данных или создается новая база данных.
-
msilib.CreateRecord(count)¶ Возвращает нового объекта записи путем вызова метода
MSICreateRecord(). count - количество полей записи.
-
msilib.init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)¶ Создать и возвращает новую базу данных name, инициализируйте ее с помощью schema и задайте свойства ProductName, ProductCode, ProductVersion и Manufacturer.
schema должен быть объектом модуля, содержащим
tablesи_Validation_recordsатрибуты; как правило,msilib.schemaдолжны быть используемый.База данных будет содержать просто схему и отчеты проверки когда эта функция возвращает.
-
msilib.add_data(database, table, records)¶ Добавить все records в таблицу с именем table в database.
Аргумент table должен быть одним из предопределенных столов в схеме MSI, например,
'Feature','File','Component','Dialog','Control', и т.д.records должен представлять собой список кортежей, каждый из которых содержит все поля записи в соответствии со схемой таблицы. Для необязательных полей может быть передан параметр
None.Значения поля может быть интеджеры, строки или сущности Binary класса.
-
class
msilib.Binary(filename)¶ Представляет записи в двоичной таблице; вставка такого объекта с помощью команды
add_data()считывает файл с именем filename в таблицу.
-
msilib.add_tables(database, module)¶ Добавить все содержимое таблицы из module в database. module должен содержать атрибут tables со списком всех таблиц, для которых должно быть добавлено содержимое, и один атрибут для каждой таблицы, имеющей фактическое содержимое.
Это, как правило - используемый, чтобы установить столы последовательности.
-
msilib.add_stream(database, name, path)¶ Добавить файл path в таблицу
_Streamdatabase с именем потока name.
-
msilib.gen_uuid()¶ Возвращает новый UUID в формате, который обычно требуется MSI (т.е. в фигурных фигурных скобках и со всеми шестизначными цифрами в верхнем регистре).
См.также
Объекты базы данных¶
-
Database.OpenView(sql)¶ Возвращает объекта представления путем вызова метода
MSIDatabaseOpenView(). sql - SQL инструкция для выполнения.
-
Database.Commit()¶ Зафиксируйте изменения, ожидающие выполнения в текущей транзакции, путем вызова метода
MSIDatabaseCommit().
-
Database.GetSummaryInformation(count)¶ Возвращает новый объект сводной информации путем вызова метода
MsiGetSummaryInformation(). count - максимальное количество обновленных значения.
-
Database.Close()¶ Закрыть объект базы данных через
MsiCloseHandle().Добавлено в версии 3.7.
Объекты представления¶
-
View.Execute(params)¶ Выполнить SQL-запрос представления через
MSIViewExecute(). Если params не являетсяNone, это запись, описывающая фактические значения маркеров параметров в запросе.
-
View.GetColumnInfo(kind)¶ Возвращает запись, описывающую столбцы представления, посредством вызова метода
MsiViewGetColumnInfo(). kind может быть либоMSICOLINFO_NAMES, либоMSICOLINFO_TYPES.
-
View.Fetch()¶ Возвращает результирующую запись запроса посредством вызова метода
MsiViewFetch().
-
View.Modify(kind, data)¶ Измените вид, вызвав функцию
MsiViewModify(). kind может быть одним изMSIMODIFY_SEEK,MSIMODIFY_REFRESH,MSIMODIFY_INSERT,MSIMODIFY_UPDATE,MSIMODIFY_ASSIGN,MSIMODIFY_REPLACE,MSIMODIFY_MERGE,MSIMODIFY_DELETE,MSIMODIFY_INSERT_TEMPORARY,MSIMODIFY_VALIDATE,MSIMODIFY_VALIDATE_NEW,MSIMODIFY_VALIDATE_FIELDилиMSIMODIFY_VALIDATE_DELETE.data должна быть записью, описывающей новые данные.
-
View.Close()¶ Закрыть вью, через
MsiViewClose().
Итоговые информационные объекты¶
-
SummaryInformation.GetProperty(field)¶ Возвращает свойство сводки, через
MsiSummaryInfoGetProperty(). field - название собственности и может быть одной из константPID_CODEPAGE,PID_TITLE,PID_SUBJECT,PID_AUTHOR,PID_KEYWORDS,PID_COMMENTS,PID_TEMPLATE,PID_LASTAUTHOR,PID_REVNUMBER,PID_LASTPRINTED,PID_CREATE_DTM,PID_LASTSAVE_DTM,PID_PAGECOUNT,PID_WORDCOUNT,PID_CHARCOUNT,PID_APPNAMEилиPID_SECURITY.
-
SummaryInformation.GetPropertyCount()¶ Возвращает количество свойств сводки, через
MsiSummaryInfoGetPropertyCount().
-
SummaryInformation.SetProperty(field, value)¶ Установить свойство через
MsiSummaryInfoSetProperty(). field может иметь те же значения, что и вGetProperty(), value - новая значение свойства. Возможные типы значение - целое число и строка.
-
SummaryInformation.Persist()¶ Запишите измененные свойства в поток сводной информации, используя команду
MsiSummaryInfoPersist().
Рекордные объекты¶
-
Record.GetFieldCount()¶ Возвращает количество полей записи, через
MsiRecordGetFieldCount().
-
Record.GetInteger(field)¶ Возвращает значение field как целое число, где это возможно. field должно быть целым числом.
-
Record.GetString(field)¶ Возвращает значение field в качестве строка, где это возможно. field должно быть целым числом.
-
Record.SetString(field, value)¶ Множество field к value через
MsiRecordSetString(). field должно быть целым числом; value строка.
-
Record.SetStream(field, value)¶ Задайте field для содержимого файла с именем value, через
MsiRecordSetStream(). field должно быть целым числом; value строка.
-
Record.SetInteger(field, value)¶ Набор field к value через
MsiRecordSetInteger(). И field, и value должны быть целым числом.
-
Record.ClearData()¶ Установите для всех полей записи значение 0, через
MsiRecordClearData().
Ошибки¶
Все обертки вокруг функций MSI поднимают MSIError; строка внутри
исключения будет содержать более подробную информацию.
Объекты CAB¶
-
class
msilib.CAB(name)¶ Класс
CABпредставляет CAB-файл. Во время построения MSI файлы будут одновременно добавляться в таблицуFilesи в CAB-файл. После добавления всех файлов CAB-файл может быть записан, а затем добавлен в MSI-файл.name - имя CAB-файла в MSI-файле.
-
append(full, file, logical)¶ Добавить файл с путевым именем full в CAB-файл под именем logical. Если файл с именем logical уже существует, создается новое имя файла.
Возвращает индекс файла в CAB-файле и новое имя файла в CAB-файле.
-
commit(database)¶ Создать CAB-файл, добавьте его как поток в MSI-файл, поместите в таблицу
Mediaи удалите сгенерированный файл с диска.
-
Объекты Directory¶
-
class
msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])¶ Создать новый каталог в таблице каталогов (Directory). Существует текущий компонент в каждый момент времени для каталога, который либо явно создается через
start_component(), либо неявно при первом добавлении файлов. Файлы добавляются в текущий компонент и в CAB-файл. Для создания каталога необходимо указать объект базового каталога (может бытьNone), путь к физическому каталогу и логическое имя каталога. default указывает слот DefoteDir в таблице каталогов. componentflags задает флаги по умолчанию, которые получают новые компоненты.-
start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None)¶ Добавить запись в таблицу Component и сделайте этот компонент текущим компонентом для этой папки. Если имя компонента не задано, имя каталога равно используемый. Если № feature дан, текущая особенность - используемый. Если flags не заданы, флаги каталога по умолчанию являются используемый. Если № keyfile дан, KeyPath оставляют пустым во входящем в комплект столе.
-
add_file(file, src=None, version=None, language=None)¶ Добавить файл в текущий компонент каталога, начав новый, если нет текущего компонента. По умолчанию имя файла в исходном файле и таблице файлов будет идентичным. Если указан файл src, он интерпретируется относительно текущего каталога. При необходимости для записи в таблице файл (File) можно указать version и language.
-
glob(pattern, exclude=None)¶ Добавить список файлов к текущему компоненту, как определено в образце шарика. Отдельные файлы могут быть исключены из списка exclude.
-
remove_pyc()¶ Удалить файлы
.pycпри удалении.
-
Особенности¶
-
class
msilib.Feature(db, id, title, desc, display, level=1, parent=None, directory=None, attributes=0)¶ Добавить новую запись в таблицу
Featureс помощью значения id, parent.id, title, desc, display, level, directory и attributes. Результирующий объект элемента может быть передан методуstart_component()Directory.
См.также
Классы графический интерфейса пользователя¶
msilib предоставляет несколько классов, объединяющих таблицы GUI в базе
данных MSI. Однако стандартный пользовательский интерфейс не предусмотрен;
используйте bdist_msi для создания MSI-файлов с пользовательским интерфейсом
для установки пакетов Python.
-
class
msilib.Control(dlg, name)¶ Базовый класс элементов управления диалогового окна. dlg - объект диалогового окна, к которому принадлежит элемент управления, а name - имя элемента управления.
-
event(event, argument, condition=1, ordering=None)¶ Внесите запись в таблицу
ControlEventдля этого элемента управления.
-
mapping(event, attribute)¶ Внесите запись в таблицу
EventMappingдля этого элемента управления.
-
condition(action, condition)¶ Внесите запись в таблицу
ControlConditionдля этого элемента управления.
-
-
class
msilib.RadioButtonGroup(dlg, name, property)¶ Создать элемент управления переключателем с именем name. property - свойство программы установки, которое устанавливается при выборе переключателя.
-
add(name, x, y, width, height, text, value=None)¶ Добавить переключатель с именем name в группу в координатах x, y, width, height и с меткой text. Если value -
None, он не выполняет своих обязательств к name.
-
-
class
msilib.Dialog(db, name, x, y, w, h, attr, title, first, default, cancel)¶ Возвращает новый объект
Dialog. Вход в столеDialogсделан, с указанными координатами, диалог атрибуты, название, название первого, дефолта, и отмените средства управления.-
control(name, type, x, y, width, height, attributes, property, text, control_next, help)¶ Возвращает новый объект
Control. Запись в таблицеControlвыполняется с указанными параметрами.Это общий метод; для конкретных типов предусмотрены специализированные методы.
-
text(name, x, y, width, height, attributes, text)¶ Добавление и возвращает элемента управления
Text.
-
bitmap(name, x, y, width, height, text)¶ Добавление и возвращает элемента управления
Bitmap.
-
line(name, x, y, width, height)¶ Добавление и возвращает элемента управления
Line.
Добавление и возвращает элемента управления
PushButton.
-
radiogroup(name, x, y, width, height, attributes, property, text, next_control)¶ Добавление и возвращает элемента управления
RadioButtonGroup.
-
checkbox(name, x, y, width, height, attributes, property, text, next_control)¶ Добавление и возвращает элемента управления
CheckBox.
-
Предварительно вычисленные таблицы¶
msilib содержит несколько подпакетов, содержащих только определения схемы и
таблицы. В настоящее время эти определения основаны на MSI версии 2.0.
-
msilib.schema¶ Это - стандартная схема MSI для MSI 2.0 с переменной tables, предоставляющей список определений стола и _Validation_records, обеспечивающий данные для проверки MSI.
-
msilib.sequence¶ Этот модуль содержит содержание таблиц стандартных последовательностей: AdminExecuteSequence, AdminUISequence, AdvtExecuteSequence, InstallExecuteSequence и InstallUISequence.
-
msilib.text¶ Этот модуль содержит определения для таблиц UIText и ActionText, для стандартных действий установщика.
