msilib
---读取和写入Microsoft安装程序文件¶
这个 msilib
支持创建Microsoft Installer (.msi
)文件。因为这些文件通常包含一个嵌入的“cabinet”文件 (.cab
,它还公开了用于创建cab文件的API。支持阅读 .cab
文件当前未实现;读取对 .msi
数据库是可能的。
此包旨在提供对 .msi
因此,文件是一个相当低级的API。此包的两个主要应用程序是 distutils
命令 bdist_msi
以及创建python安装程序包本身(尽管它当前使用的是 msilib
)
包内容可以大致分为四部分:低级cab例程、低级msi例程、高级msi例程和标准表结构。
- msilib.FCICreate(cabname, files)¶
创建名为的新cab文件 网名 . 文件夹 必须是元组列表,每个元组包含磁盘上文件的名称以及cab文件中文件的名称。
这些文件将按它们在列表中的显示顺序添加到cab文件中。所有文件都使用mszip压缩算法添加到单个cab文件中。
对于MSI创建的各个步骤,对python的回调目前未公开。
- msilib.UuidCreate()¶
返回新的唯一标识符的字符串表示形式。这将封装Windows API函数
UuidCreate()
和UuidToString()
.
- msilib.OpenDatabase(path, persist)¶
通过调用msiOpenDatabase返回新的数据库对象。 path 是msi文件的文件名; 坚持 可以是常量之一
MSIDBOPEN_CREATEDIRECT
,MSIDBOPEN_CREATE
,MSIDBOPEN_DIRECT
,MSIDBOPEN_READONLY
或MSIDBOPEN_TRANSACT
,可以包括标志MSIDBOPEN_PATCHFILE
. 有关这些标志的含义,请参阅Microsoft文档;根据标志,将打开现有数据库或创建新数据库。
- msilib.CreateRecord(count)¶
通过调用
MSICreateRecord()
. 计数 是记录的字段数。
- msilib.init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)¶
创建并返回新数据库 name ,初始化时使用 图式 ,并设置属性 ProductName , ProductCode , ProductVersion 和 制造商 .
图式 必须是包含
tables
和_Validation_records
属性;通常,msilib.schema
应该使用。当函数返回时,数据库将只包含模式和验证记录。
- msilib.add_data(database, table, records)¶
全部添加 记录 到名为的表 表格 在里面 database .
这个 表格 参数必须是msi架构中的预定义表之一,例如
'Feature'
,'File'
,'Component'
,'Dialog'
,'Control'
等。记录 应该是一个元组列表,每个元组根据表的模式包含记录的所有字段。对于可选字段,
None
可以通过。字段值可以是整数、字符串或二进制类的实例。
- class msilib.Binary(filename)¶
表示二进制表中的项;使用
add_data()
读取名为的文件 filename 进入表格。
- msilib.add_tables(database, module)¶
添加所有表内容 模块 到 database . 模块 必须包含属性 表格 列出应为其添加内容的所有表,以及每个具有实际内容的表的一个属性。
这通常用于安装序列表。
- 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()
. 计数 是更新值的最大数目。
- Database.Close()¶
关闭数据库对象,通过
MsiCloseHandle()
.3.7 新版功能.
查看对象¶
- View.Execute(params)¶
执行视图的SQL查询,通过
MSIViewExecute()
.如果 帕拉姆 不是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()
. realm 是属性的名称,可以是常量之一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()
. realm 可以具有与中相同的值GetProperty()
, value 是属性的新值。可能的值类型是整数和字符串。
- SummaryInformation.Persist()¶
将修改后的属性写入摘要信息流,使用
MsiSummaryInfoPersist()
.
记录对象¶
- Record.GetFieldCount()¶
返回记录的字段数,通过
MsiRecordGetFieldCount()
.
- Record.GetInteger(field)¶
返回的值 realm 尽可能以整数表示。 realm 必须是整数。
- Record.GetString(field)¶
返回的值 realm 在可能的情况下作为字符串。 realm 必须是整数。
- Record.SetString(field, value)¶
集合 realm 到 value 通过
MsiRecordSetString()
. realm 必须是整数; value 一个字符串。
- Record.SetStream(field, value)¶
集合 realm 到名为的文件的内容 value 通过
MsiRecordSetStream()
. realm 必须是整数; value 一个字符串。
- Record.SetInteger(field, value)¶
集合 realm 到 value 通过
MsiRecordSetInteger()
.两者都是 realm 和 value 必须是整数。
- Record.ClearData()¶
将记录的所有字段设置为0,通过
MsiRecordClearData()
.
错误¶
MSI函数周围的所有封装器都将引发 MSIError
;异常中的字符串将包含更多详细信息。
驾驶室物件¶
- class msilib.CAB(name)¶
类
CAB
表示一个cab文件。在msi构造期间,文件将同时添加到Files
表和一个cab文件。然后,添加所有文件后,可以写入cab文件,然后将其添加到msi文件。name 是msi文件中cab文件的名称。
- append(full, file, logical)¶
添加路径名为的文件 full 到cab文件,在名称下 符合逻辑的 . 如果已经有一个名为 符合逻辑的 ,将创建新的文件名。
返回cab文件中文件的索引,以及cab文件中文件的新名称。
- commit(database)¶
生成一个cab文件,将其作为流添加到msi文件,并将其放入
Media
表,然后从磁盘中删除生成的文件。
目录对象¶
- class msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])¶
在目录表中创建新目录。目录的每个时间点都有一个当前组件,可以通过
start_component()
或在首次添加文件时隐式添加。文件将添加到当前组件和cab文件中。要创建目录,需要指定基本目录对象(可以None
,物理目录的路径和逻辑目录名。 default 指定目录表中的defaultdir槽。 组件标志 指定新组件获取的默认标志。- start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None)¶
向组件表中添加一个条目,并使该组件成为该目录的当前组件。如果没有给出组件名,则使用目录名。如果没有 特征 如果给定,则使用当前功能。如果没有 flags 如果给定,则使用目录的默认标志。如果没有 关键文件 如果给定,则keypath在component表中保留为空。
- add_file(file, src=None, version=None, language=None)¶
将文件添加到目录的当前组件,如果没有当前组件,则启动新的文件。默认情况下,源和文件表中的文件名将相同。如果 src 指定了文件,它是相对于当前目录进行解释的。可选地,A 版本 和A 语言 可以为文件表中的条目指定。
- glob(pattern, exclude=None)¶
按照glob模式中的指定,向当前组件添加文件列表。单个文件可以排除在 排除 名单。
- remove_pyc()¶
去除
.pyc
卸载时的文件。
特征¶
图形用户界面类¶
msilib
提供了几个将GUI表封装在MSI数据库中的类。但是,没有提供标准用户界面;使用 bdist_msi
创建带有用于安装python包的用户界面的msi文件。
- 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 . 属性 是在选择单选按钮时设置的安装程序属性。
- add(name, x, y, width, height, text, value=None)¶
添加名为的单选按钮 name 在坐标系下 x , y , 宽度 , 高度 和标签 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(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 2.0的标准msi架构,其中 表格 提供表定义列表的变量,以及 _Validation_records 为MSI验证提供数据。
- msilib.sequence¶
此模块包含标准序列表的表内容: AdminExecuteSequence , AdminUISequence , AdvtExecuteSequence , InstallExecuteSequence 和 InstallUISequence .
- msilib.text¶
此模块包含用于标准安装程序操作的UIText和ActionText表的定义。