msilib
— Чтение и запись файлов установщика Microsoft¶
Исходный код: Lib/msilib/__init__.py
Утратил актуальность с версии 3.11, будет удален в версии 3.13: Модуль msilib
устарел (подробнее см. PEP 594).
msilib
поддерживает создание файлов установщика Microsoft (.msi
). Поскольку эти файлы часто содержат встроенный файл «cabinet», (.cab
), он также предоставляет API для создания CAB-файлов. Поддержка чтения файлов .cab
в настоящее время не реализована; возможна поддержка чтения базы данных .msi
.
Этот пакет предназначен для обеспечения полного доступа ко всем таблицам в файле .msi
, поэтому это довольно низкоуровневый API. Одним из основных применений этого пакета является создание самого установочного пакета Python (хотя в настоящее время он использует другую версию msilib
).
Содержимое пакета можно условно разделить на четыре части: низкоуровневые процедуры CAP, низкоуровневые процедуры 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)¶
Верните новый объект record, вызвав
MSICreateRecord()
. count - это количество полей в записи.
- msilib.init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)¶
Создайте и верните новую базу данных name, инициализируйте ее с помощью schema и задайте свойства ProductName, ProductCode, ProductVersion и Manufacturer.
схема должна быть объектом модуля, содержащим атрибуты
tables
и_Validation_records
; как правило, следует использоватьmsilib.schema
.Когда эта функция вернется, база данных будет содержать только схему и записи проверки.
- msilib.add_data(database, table, records)¶
Добавьте все записи в таблицу с именем table в базе данных.
Аргументом table должна быть одна из предопределенных таблиц в схеме MSI, например.
'Feature'
,'File'
,'Component'
,'Dialog'
,'Control'
, и т.д.записи должны представлять собой список кортежей, каждый из которых содержит все поля записи в соответствии со схемой таблицы. Для необязательных полей может быть передан
None
.Значениями полей могут быть целые числа, строки или экземпляры класса Binary.
- class msilib.Binary(filename)¶
Представляет записи в двоичной таблице; при вставке такого объекта с помощью
add_data()
в таблицу записывается файл с именем filename.
- msilib.add_tables(database, module)¶
Добавьте все содержимое таблицы из модуля в базу данных. модуль должен содержать атрибут таблицы со списком всех таблиц, для которых необходимо добавить содержимое, и по одному атрибуту для каждой таблицы, содержащей фактическое содержимое.
Обычно это используется для установки таблиц последовательности.
- msilib.add_stream(database, name, path)¶
Добавьте файл path в таблицу
_Stream
базы данных* с именем потока name.
- msilib.gen_uuid()¶
Возвращает новый UUID в формате, который обычно требуется (т.е. в фигурных скобках и со всеми шестнадцатеричными цифрами в верхнем регистре).
См.также
Объекты базы данных¶
- 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()
. вид может быть одним из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
.данные должны быть записью, описывающей новые данные.
- View.Close()¶
Закройте окно просмотра с помощью
MsiViewClose()
.
Объекты сводной информации¶
- SummaryInformation.GetProperty(field)¶
Возвращает свойство сводки с помощью
MsiSummaryInfoGetProperty()
. поле - это имя свойства, которое может быть одной из констант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()
. поле может иметь те же значения, что и вGetProperty()
, значение - это новое значение свойства. Возможные типы значений - целое число и строка.
- SummaryInformation.Persist()¶
Запишите измененные свойства в поток сводной информации, используя
MsiSummaryInfoPersist()
.
Объекты записи¶
- Record.GetFieldCount()¶
Возвращает количество полей в записи через
MsiRecordGetFieldCount()
.
- Record.GetInteger(field)¶
По возможности возвращайте значение 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
; строка внутри исключения будет содержать более подробную информацию.
Объекты КАБИНЫ¶
- 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])¶
Создайте новый каталог в таблице каталогов. В каждый момент времени для каталога существует текущий компонент, который либо явно создается с помощью
start_component()
, либо неявно при первом добавлении файлов. Файлы добавляются в текущий компонент и в cab-файл. Для создания каталога необходимо указать объект базового каталога (может бытьNone
), путь к физическому каталогу и логическое имя каталога. default указывает слот DefaultDir в таблице каталогов. componentflags указывает флаги по умолчанию, которые получают новые компоненты.- start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None)¶
Добавьте запись в таблицу компонентов и сделайте этот компонент текущим компонентом для данного каталога. Если имя компонента не указано, используется имя каталога. Если функция не указана, используется текущая функция. Если флаги не заданы, используются флаги каталога по умолчанию. Если ключевой файл не задан, путь к ключу в таблице компонентов остается пустым.
- add_file(file, src=None, version=None, language=None)¶
Добавьте файл в текущий компонент каталога, запустив новый, если текущего компонента нет. По умолчанию имя файла в источнике и файловой таблице будет идентичным. Если указан файл src, он интерпретируется относительно текущего каталога. При желании для записи в таблице файлов можно указать версию и язык.
- 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, заголовок, описание, отображение, уровень, каталог и атрибуты. Результирующий объект feature может быть передан вstart_component()
методDirectory
.
См.также
Классы графического интерфейса пользователя¶
msilib
предоставляет несколько классов, которые переносят таблицы GUI в базу данных MSI. Однако стандартный пользовательский интерфейс не предоставляется.
- class msilib.Control(dlg, name)¶
Базовый класс элементов управления dialog. dlg - это объект dialog, к которому принадлежит элемент управления, а 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, ширина, высота и с надписью текст. Если значение равно
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¶
Этот модуль содержит определения для таблиц UI Text и ActionText, для стандартных действий установщика.