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().
См. также
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]) -
Создает новый каталог в таблице каталогов. В любой момент времени для каталога существует текущий компонент, который либо явным образом создаётся с помощью
start_component(), либо неявно, когда файлы добавляются в первый раз. Файлы добавляются в текущий компонент и в файл cab. Для создания каталога необходимо указать базовый объект каталога (может бытьNone), путь к физическому каталогу и имя логического каталога. default задает значение слота DefaultDir в таблице каталогов. componentflags задает значения по умолчанию для новых компонентов.-
start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None) -
Добавляет запись в таблицу компонентов и делает этот компонент текущим компонентом для этого каталога. Если имя компонента не указано, используется имя каталога. Если feature не указан, используется текущая функция. Если flags не указаны, используются флаги по умолчанию для каталога. Если keyfile не указан, KeyPath в таблице компонентов остается пустым.
-
add_file(file, src=None, version=None, language=None) -
Добавляет файл в текущий компонент каталога, создавая новый, если текущий компонент отсутствует. По умолчанию имя файла в источнике и таблице файлов будет идентичным. Если указан файл src, он интерпретируется относительно текущего каталога. Дополнительно можно указать version и language для записи в таблице файлов.
-
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.
-
См. также
Таблица диалогов Таблица элементов управления Типы элементов управления Таблица 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/msilib.html