msilib
— Читання та запис файлів Microsoft Installer¶
Вихідний код: Lib/msilib/__init__.py
Deprecated since version 3.11, will be removed in version 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).
Дивись також
Об’єкти бази даних¶
- 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
.
Дивись також
Класи 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 для стандартних дій інсталятора.