Spec-Zone.ru › Python 3.8

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

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

Модуль 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.

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

Возвращает объект представления, вызвав MSIDatabaseOpenView(). sql — SQL-запрос для выполнения.

Database.Commit()

Выполняет подтверждение изменений, ожидающих обработки в текущей транзакции, вызывая MSIDatabaseCommit().

Database.GetSummaryInformation(count)

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

Database.Close()

Закрывает объект базы данных с помощью MsiCloseHandle().

Доступно начиная с версии 3.7.

См. также

MSIDatabaseOpenView MSIDatabaseCommit MSIGetSummaryInformation MsiCloseHandle

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

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

См. также

MsiViewExecute MSIViewGetColumnInfo MsiViewFetch MsiViewModify MsiViewClose

END_OF_DOCUMENT_MARKER

Сводная информация об объектах

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

См. также

MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyCount MsiSummaryInfoSetProperty 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().

См. также

MsiRecordGetFieldCount MsiRecordSetString MsiRecordSetStream MsiRecordSetInteger 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 и делает этот компонент текущим компонентом для данной директории. Если имя компонента не указано, используется имя директории. Если feature не указано, используется текущая функция. Если flags не указаны, используются значения по умолчанию для директории. Если keyfile не указан, в таблице Component KeyPath остаётся пустым.

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

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

glob(pattern, exclude=None)

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

remove_pyc()

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

См. также

Таблица Directory Таблица File Таблица Component Таблица FeatureComponents

Функции

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

END_OF_DOCUMENT_MARKER

Классы GUI

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.

См. также

Таблица диалоговых окон Таблица элементов управления Типы элементов управления Таблица ControlCondition Таблица ControlEvent Таблица EventMapping Таблица RadioButton

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

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

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/msilib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API