Содержание страницы
34.1. msilib – Чтение и запись файлов Microsoft Installer¶msilib – Read and write Microsoft Installer files
Исходный код: 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 (то есть в фигурных скобках, все шестнадцатеричные цифры в верхнем регистре).
См. также
34.1.1. Объекты базы данных¶Database Objects
-
Database.OpenView(sql)¶ Возвращает объект представления, вызывая
MSIDatabaseOpenView(). sql – это SQL-инструкция, которую нужно выполнить.
-
Database.Commit()¶ Фиксирует ожидающие изменения в текущей транзакции, вызывая
MSIDatabaseCommit().
-
Database.GetSummaryInformation(count)¶ Возвращает новый объект сводной информации, вызывая
MsiGetSummaryInformation(). count – это максимальное количество обновлённых значений.
34.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().
34.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().
34.1.4. Объекты записей¶Record Objects
-
Record.GetFieldCount()¶ Возвращает количество полей записи, через
MsiRecordGetFieldCount().
-
Record.GetInteger(field)¶ Возвращает значение поля в виде целого числа, где это возможно. поле должно быть целым числом.
-
Record.GetString(field)¶ Возвращает значение поля в виде строки, где это возможно. поле должно быть целым числом.
-
Record.SetString(field, value)¶ Устанавливает поле в значение через
MsiRecordSetString(). поле должно быть целым числом; значение – строкой.
-
Record.SetStream(field, value)¶ Устанавливает поле в содержимое файла с именем значение, через
MsiRecordSetStream(). поле должно быть целым числом; значение – строкой.
-
Record.SetInteger(field, value)¶ Устанавливает поле в значение через
MsiRecordSetInteger(). И поле, и значение должны быть целыми числами.
-
Record.ClearData()¶ Устанавливает все поля записи в 0, через
MsiRecordClearData().
34.1.5. Ошибки¶Errors
Все обёртки вокруг функций MSI возбуждают MsiError; строка внутри
исключения будет содержать больше подробностей.
34.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и удаляет созданный файл с диска.
-
34.1.7. Объекты каталогов¶Directory Objects
-
class
msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])¶ Создаёт новую запись в таблице Directory. В каждый момент времени для каталога существует текущий компонент; он может быть создан явно через
start_component()или неявно при первом добавлении файлов. Файлы добавляются в текущий компонент и в CAB-файл. Для создания каталога нужно указать базовый объект каталога (может бытьNone), путь к физическому каталогу и логическое имя каталога. default задаёт слот DefaultDir в таблице Directory. 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при удалении.
-
34.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. Полученный объект feature можно передать методуstart_component()объектаDirectory.
См. также
34.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добавляется запись с указанными координатами, атрибутами диалога, заголовком, именами первого, стандартного (default) и отменяющего (cancel) элементов управления.-
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.
-
34.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 для стандартных действий установщика.