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 (т.е. в фигурных скобках, со всеми шестнадцатеричными цифрами в верхнем регистре).
См. также
Объекты базы данных
-
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(). 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().
Сводная информация об объектах
-
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().
Объекты записей
-
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().
Ошибки
Все обёртки вокруг функций 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при удалении.
-
Функции
-
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. Новые компоненты автоматически добавляются к функции по умолчанию, если функция не указана явно.
-
См. также
Классы 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.
-
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 -
Этот модуль содержит определения таблиц UIText и ActionText для стандартных действий установщика.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/msilib.html