Содержание страницы
32.1. msilib – Чтение и запись файлов Microsoft Installer¶msilib – 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 (то есть в фигурных скобках, все шестнадцатеричные цифры в верхнем регистре).
См. также
32.1.1. Объекты базы данных¶Database Objects
- Database.OpenView(sql)¶
- Возвращает объект представления вызовом MSIDatabaseOpenView(). sql – SQL-выражение для выполнения.
- Database.Commit()¶
- Фиксирует ожидающие изменения в текущей транзакции вызовом MSIDatabaseCommit().
- Database.GetSummaryInformation(count)¶
- Возвращает новый объект сводной информации вызовом MsiGetSummaryInformation(). count – максимальное количество обновлённых значений.
32.1.2. Объекты представления¶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().
32.1.3. Объекты сводной информации¶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().
32.1.4. Объекты Record¶Record 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().
32.1.5. Ошибки¶Errors
Все обёртки вокруг функций MSI вызывают MsiError; строка внутри исключения содержит подробности.
32.1.6. Объекты CAB¶CAB 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 и удаляет созданный файл с диска.
32.1.7. Объекты Directory¶Directory Objects
- 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 и делает этот компонент текущим для данного каталога. Если имя компонента не указано, используется имя каталога. Если не указан 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/.pyo при удалении.
32.1.8. Компоненты¶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. Полученный объект функции можно передать методу start_component() объекта Directory.
- set_current()¶
- Сделать этот компонент текущим компонентом msilib. Новые компоненты автоматически добавляются в компонент по умолчанию, если компонент не указан явно.
См. также
32.1.9. Классы GUI¶GUI classes
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)¶
Создаёт элемент управления «переключатель» (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 добавляется запись с указанными координатами, атрибутами диалога, заголовком, именами первого, стандартного и отменяющего элементов управления.
- 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.
32.1.10. Предварительно вычисленные таблицы¶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 для стандартных действий установщика.