msilib — Чтение и запись файлов Microsoft Installer

Исходный код: Lib/msilib/__init__.py.

Не рекомендуется, начиная с версии 3.11: Модуль msilib является устаревшим (подробнее см. PEP 594).


msilib поддерживает создание файлов Microsoft Installer (.msi). Поскольку эти файлы часто содержат встроенный файл «кабинета» (.cab), он также предоставляет API для создания файлов CAB. Поддержка чтения файлов .cab в настоящее время не реализована; возможна поддержка чтения базы данных .msi.

Целью этого пакета является предоставление полного доступа ко всем таблицам в файле .msi, поэтому он представляет собой довольно низкоуровневый API. Два основных применения этого пакета - это команда distutils bdist_msi и создание самого пакета Python installer (хотя в настоящее время используется другая версия 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. Значение этих флагов см. в документации Microsoft; в зависимости от флагов открывается существующая база данных или создается новая.

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)

Добавьте все записи в таблицу с именем table в базе данных.

Аргумент table должен быть одной из предопределенных таблиц в схеме MSI, например, 'Feature', 'File', 'Component', 'Dialog', 'Control' и т.д.

records должен представлять собой список кортежей, каждый из которых содержит все поля записи в соответствии со схемой таблицы. Для необязательных полей может быть передано None.

Значения полей могут быть интами, строками или экземплярами класса Binary.

class msilib.Binary(filename)

Представляет записи в таблице Binary; вставка такого объекта с помощью add_data() считывает файл с именем filename в таблицу.

msilib.add_tables(database, module)

Добавьте все содержимое таблиц из модуля в базу данных. модуль должен содержать атрибут tables, перечисляющий все таблицы, для которых должно быть добавлено содержимое, и по одному атрибуту для каждой таблицы, содержащей фактическое содержимое.

Обычно это используется для установки таблиц последовательности.

msilib.add_stream(database, name, path)

Добавьте файл path в таблицу _Stream базы данных database, с именем потока 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 в виде целого числа, если это возможно. поле должно быть целым числом.

Record.GetString(field)

Возвращает значение field в виде строки, если это возможно. field должно быть целым числом.

Record.SetString(field, value)

Установите поле в значение через MsiRecordSetString(). поле должно быть целым числом; значение - строкой.

Record.SetStream(field, value)

Установите field в содержимое файла с именем value, через MsiRecordSetStream(). поле должно быть целым числом; значение - строкой.

Record.SetInteger(field, value)

Установите поле в значение через MsiRecordSetInteger(). И поле, и значение должны быть целыми числами.

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 и удалите сгенерированный файл с диска.

Объекты каталога

class msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])

Создать новый каталог в таблице Directory. В каждый момент времени для каталога существует текущий компонент, который либо явно создается через start_component(), либо неявно, когда файлы добавляются в первый раз. Файлы добавляются в текущий компонент и в файл cab. Для создания каталога необходимо указать объект базового каталога (может быть None), путь к физическому каталогу и логическое имя каталога. default указывает слот DefaultDir в таблице каталогов. componentflags определяет флаги по умолчанию, которые получают новые компоненты.

start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None)

Добавляет запись в таблицу Component и делает этот компонент текущим компонентом для данного каталога. Если имя компонента не указано, используется имя каталога. Если не указана функция, то используется текущая функция. Если не указаны флаги, то используются флаги по умолчанию для данного каталога. Если не указан keyfile, то KeyPath в таблице Component оставляется равным null.

add_file(file, src=None, version=None, language=None)

Добавляет файл в текущий компонент каталога, начинает новый, если текущего компонента нет. По умолчанию имя файла в исходнике и в таблице файлов будет идентичным. Если указан файл src, то он интерпретируется относительно текущего каталога. Опционально для записи в таблице File могут быть указаны version и language.

glob(pattern, exclude=None)

Добавить список файлов к текущему компоненту, как указано в шаблоне glob. Отдельные файлы могут быть исключены в списке 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.

set_current()

Сделать эту функцию текущей функцией msilib. Новые компоненты автоматически добавляются в функцию по умолчанию, если функция не указана явно.

См.также

Feature Table

Классы графического интерфейса пользователя

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(name, x, y, width, height, attributes, text, next_control)

Добавить и вернуть элемент управления 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 для стандартных действий программы установки.

Вернуться на верх