Документация Python неофициальный перевод
Содержание страницы

msilib – Чтение и запись файлов Microsoft Installermsilib – Read and write Microsoft Installer files

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

Устарело с версии 3.11, будет удалено в версии 3.13: Модуль msilib устарел (см. PEP 594 для подробностей).


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

Этот пакет предназначен для обеспечения полного доступа ко всем таблицам в файле .msi, поэтому он представляет собой довольно низкоуровневый API. Одним из основных применений пакета является создание самого установочного пакета 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. См. документацию 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)

Добавляет все records в таблицу с именем table в database.

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

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

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

class msilib.Binary(filename)

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

msilib.add_tables(database, module)

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

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

msilib.add_stream(database, name, path)

Добавляет файл path в таблицу _Stream базы данных database с именем потока name.

msilib.gen_uuid()

Возвращает новый UUID в формате, который обычно требует MSI (т.е. в фигурных скобках, и все шестнадцатеричные цифры в верхнем регистре).

См. также

FCICreate UuidCreate UuidToString

Объекты базы данныхDatabase Objects

Database.OpenView(sql)

Возвращает объект представления, вызывая MSIDatabaseOpenView(). sql – это SQL-инструкция, которую нужно выполнить.

Database.Commit()

Фиксирует ожидающие изменения в текущей транзакции, вызывая MSIDatabaseCommit().

Database.GetSummaryInformation(count)

Возвращает новый объект сводной информации, вызывая MsiGetSummaryInformation(). count – это максимальное количество обновлённых значений.

Database.Close()

Закрывает объект базы данных через MsiCloseHandle().

Добавлено в версии 3.7.

Объекты представленияView Objects

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().

Объекты сводной информацииSummary Information Objects

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().

Объекты RecordRecord Objects

Record.GetFieldCount()

Возвращает количество полей записи, через MsiRecordGetFieldCount().

Record.GetInteger(field)

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

Record.GetString(field)

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

Record.SetString(field, value)

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

Record.SetStream(field, value)

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

Record.SetInteger(field, value)

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

Record.ClearData()

Устанавливает все поля записи в 0, через MsiRecordClearData().

ОшибкиErrors

Все обёртки вокруг функций MSI возбуждают MSIError; строка внутри исключения будет содержать больше подробностей.

Объекты CABCAB Objects

class msilib.CAB(name)

Класс CAB представляет CAB-файл. Во время создания MSI файлы добавляются одновременно в таблицу Files и в CAB-файл. Затем, когда все файлы добавлены, CAB-файл можно записать, а затем добавить в MSI-файл.

Имя – это имя CAB-файла в MSI-файле.

append(full, file, logical)

Добавляет файл с полным именем полный в CAB-файл под именем логическое. Если уже существует файл с именем логическое, создаётся новое имя файла.

Возвращает индекс файла в CAB-файле и новое имя файла внутри CAB-файла.

commit(database)

Создаёт CAB-файл, добавляет его как поток в MSI-файл, помещает его в таблицу Media и удаляет созданный файл с диска.

Объекты каталоговDirectory Objects

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

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

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

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

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

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

glob(pattern, exclude=None)

Добавляет в текущий компонент файлы, соответствующие glob-шаблону. Отдельные файлы можно исключить с помощью списка exclude.

remove_pyc()

Удаляет файлы .pyc при удалении.

ВозможностиFeatures

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. Полученный объект feature можно передать методу start_component() объекта Directory.

set_current()

Делает этот признак (feature) текущим для msilib. Новые компоненты автоматически добавляются в признак по умолчанию, если не указан явно другой признак.

См. также

Feature Table

Классы GUIGUI classes

Модуль msilib предоставляет несколько классов, которые оборачивают таблицы GUI в базе данных MSI. Однако стандартный пользовательский интерфейс не предоставляется.

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)

Создаёт элемент управления «переключатель» (radio button) с именем 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 добавляется запись с указанными координатами, атрибутами диалога, заголовком, именами первого, стандартного (default) и отменяющего (cancel) элементов управления.

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.

Предварительно вычисленные таблицыPrecomputed tables

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