msilib — Читання та запис файлів Microsoft Installer

Вихідний код: Lib/msilib/__init__.py

Застаріло з версії 3.11, буде видалено у версії 3.13: Модуль msilib є застарілим (докладніше див. PEP 594).


msilib підтримує створення файлів Microsoft Installer (.msi). Оскільки ці файли часто містять вбудований файл «cabinet» (.cab), він також надає API для створення файлів CAB. Підтримка читання файлів .cab наразі не реалізована; можлива підтримка читання для бази даних .msi.

This package aims to provide complete access to all tables in an .msi file, therefore, it is a fairly low-level API. One primary application of this package is the creation of Python installer package itself (although that currently uses a different version of 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. шлях — ім’я файлу 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)

Створіть і поверніть ім’я нової бази даних, ініціалізуйте його схемою та встановіть властивості ProductName, ProductCode, ProductVersion і Manufacturer.

schema має бути об’єктом модуля, що містить атрибути tables і _Validation_records; зазвичай слід використовувати msilib.schema.

База даних міститиме лише схему та записи перевірки, коли ця функція повернеться.

msilib.add_data(database, table, records)

Додайте всі записи до таблиці з назвою table у базі даних.

Аргумент таблиця має бути однією з попередньо визначених таблиць у схемі MSI, напр. 'Функція', 'Файл', 'Компонент', 'Діалог', 'Керування' тощо.

records має бути списком кортежів, кожен з яких містить усі поля запису відповідно до схеми таблиці. Для необов’язкових полів можна передати None.

Значення полів можуть бути числами, рядками або екземплярами класу Binary.

class msilib.Binary(filename)

Представляє записи в двійковій таблиці; вставлення такого об’єкта за допомогою add_data() зчитує файл із назвою filename у таблицю.

msilib.add_tables(database, module)

Додайте весь вміст таблиці з модуля до бази даних. module повинен містити атрибут tables зі списком усіх таблиць, для яких слід додати вміст, і один атрибут на таблицю, яка має фактичний вміст.

Це зазвичай використовується для встановлення таблиць послідовностей.

msilib.add_stream(database, name, path)

Додайте шлях до файлу в таблицю _Stream бази даних з назвою потоку name.

msilib.gen_uuid()

Return a new UUID, in the format that MSI typically requires (i.e. in curly braces, and with all hexdigits in uppercase).

Дивись також

FCICreate UuidCreate UuidToString

Об’єкти бази даних

Database.OpenView(sql)

Поверніть об’єкт представлення, викликавши MSIDatabaseOpenView(). sql — це оператор SQL для виконання.

Database.Commit()

Зафіксуйте зміни, що очікують на розгляд, у поточній транзакції, викликавши MSIDatabaseCommit().

Database.GetSummaryInformation(count)

Поверніть новий об’єкт підсумкової інформації, викликавши MsiGetSummaryInformation(). count — максимальна кількість оновлених значень.

Database.Close()

Закрийте об’єкт бази даних через MsiCloseHandle().

Added in version 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.

data має бути записом, що описує нові дані.

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

Дивись також

MsiSummaryInfoGetProperty MsiSummaryInfoGetPropertyCount MsiSummaryInfoSetProperty MsiSummaryInfoPersist a0672e70ze4d

Об’єкти запису

Record.GetFieldCount()

Повертає кількість полів запису через MsiRecordGetFieldCount().

Record.GetInteger(field)

Повертайте значення поля як ціле число, де це можливо. поле має бути цілим числом.

Record.GetString(field)

Поверніть значення поля як рядок, де це можливо. поле має бути цілим числом.

Record.SetString(field, value)

Установіть поле на значення через MsiRecordSetString(). поле має бути цілим числом; значення рядок.

Record.SetStream(field, value)

Установіть у поле вміст файлу з назвою value через MsiRecordSetStream(). поле має бути цілим числом; значення рядок.

Record.SetInteger(field, value)

Установіть поле на значення через MsiRecordSetInteger(). І поле, і значення мають бути цілими числами.

Record.ClearData()

Установіть для всіх полів запису значення 0 через MsiRecordClearData().

Помилки

Усі обгортки навколо функцій MSI викликають MSIError; рядок всередині винятку міститиме більше деталей.

Об’єкти CAB

class msilib.CAB(name)

Клас CAB представляє файл CAB. Під час створення MSI файли будуть додані одночасно до таблиці Files і до CAB-файлу. Потім, коли всі файли будуть додані, файл CAB можна записати, а потім додати до файлу MSI.

ім’я — це ім’я файлу 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)

Додайте запис до таблиці Component і зробіть цей компонент поточним компонентом для цього каталогу. Якщо назва компонента не вказана, використовується назва каталогу. Якщо функція не вказана, використовується поточна функція. Якщо прапорці не вказано, використовуються прапорці каталогу за замовчуванням. Якщо keyfile не вказано, KeyPath залишається нульовим у таблиці Component.

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

Додати файл до поточного компонента каталогу, запустивши новий, якщо поточного компонента немає. За замовчуванням ім’я файлу в джерелі та таблиці файлів будуть ідентичними. Якщо вказано файл src, він інтерпретується відносно поточного каталогу. За бажанням можна вказати версію та мову для запису в таблиці 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 provides several classes that wrap the GUI tables in an MSI database. However, no standard user interface is provided.

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)

Додайте перемикач із назвою ім’я до групи з координатами x, y, ширина, висота та з міткою текст. Якщо value дорівнює None, за замовчуванням воно має name.

class msilib.Dialog(db, name, x, y, w, h, attr, title, first, default, cancel)

Повертає новий об’єкт Dialog. Зроблено запис у таблиці Діалог із зазначеними координатами, атрибутами діалогу, назвою, назвою першого, елементами керування за замовчуванням і скасуванням.

control(name, type, x, y, width, height, attributes, property, text, control_next, help)

Повертає новий об’єкт Control. Запис у таблиці Контроль робиться із зазначеними параметрами.

Це загальний метод; для конкретних типів передбачені спеціалізовані методи.

text(name, x, y, width, height, attributes, 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

Цей модуль містить визначення для таблиць UIText і ActionText для стандартних дій інсталятора.