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

msilib – чтение и запись файлов установщика Microsoftmsilib – Read and write Microsoft Installer files

Платформы: Windows

Модуль msilib поддерживает создание файлов Microsoft Installer (.msi). Поскольку такие файлы часто содержат встроенный «кабинетный» файл (.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. Смотрите документацию 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.

Значения полей могут быть целыми числами (int или long), строками или экземплярами класса 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 (то есть в фигурных скобках, все шестнадцатеричные цифры в верхнем регистре).

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

Database.OpenView(sql)
Возвращает объект представления, вызывая MSIDatabaseOpenView. sql – выполняемый SQL-запрос.
Database.Commit()
Фиксирует ожидающие изменения в текущей транзакции, вызывая MSIDatabaseCommit.
Database.GetSummaryInformation(count)
Возвращает новый объект сводных сведений, вызывая MsiGetSummaryInformation. count – максимальное количество обновляемых значений.

Объекты представления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)
Устанавливает 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.

Ошибки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, component[, componentflags])

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

start_component([component[, feature[, flags[, keyfile[, uuid]]]]])
Добавляет запись в таблицу Component и делает этот компонент текущим для данного каталога. Если имя компонента не указано, используется имя каталога. Если не указан feature, используется текущий признак (feature). Если не указаны flags, используются флаги по умолчанию для каталога. Если не указан keyfile, KeyPath в таблице Component остаётся пустым.
add_file(file[, src[, version[, language]]])
Добавляет файл в текущий компонент каталога, начиная новый, если текущего компонента нет. По умолчанию имя файла в исходном расположении и в таблице File совпадает. Если указан файл src, путь интерпретируется относительно текущего каталога. Дополнительно можно указать version и language для записи в таблице File.
glob(pattern[, exclude])
Добавляет в текущий компонент файлы, соответствующие glob-шаблону. Отдельные файлы можно исключить с помощью списка exclude.
remove_pyc()
Удаляет файлы .pyc/.pyo при удалении.

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

class msilib.Feature(database, id, title, desc, display[, level=1[, parent[, directory[, attributes=0]]]])

Добавляет новую запись в таблицу Feature, используя значения id, parent.id, title, desc, display, level, directory и attributes. Полученный объект функции можно передать методу start_component() объекта Directory.

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

Классы GUIGUI classes

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

class msilib.Control(dlg, name)

Базовый класс для элементов управления диалогом. dlg – это объект диалога, которому принадлежит элемент управления, а name – имя элемента управления.

event(event, argument[, condition=1[, ordering]])
Создаёт запись в таблице 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])
Добавляет переключатель с именем name в группу, по координатам x, y, width, height, и с меткой text. Если value опущен, по умолчанию используется 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.

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