msilib- 读取和写入Microsoft Installer文件 – MS Windows特定服务(Python教程)(参考资料)
msilib
– 读取和写入Microsoft Installer文件
源代码: Lib / msilib / __ init__.py
msilib
支持创建Microsoft Installer(.msi
)files。因为这些文件通常包含一个嵌入的“cabinet”文件(.cab
),它还会提供一个API来创建CAB文件。目前尚未实现对.cab
文件读取的支持;读取对.msi
数据库的支持是可能的.
这个包旨在提供对.msi
文件中所有表的完全访问,因此,它是一个相当低级的API。这个包的两个主要应用是distutils
命令bdist_msi
,以及创建Python安装程序包本身(虽然目前使用的是msilib
的不同版本。)
包内容可以大致分为四个部分:低级CABroutines,低级MSI例程,更高级别的MSI例程和标准表结构.
msilib.
FCICreate
(cabname, files )- 创建一个名为cabname. files必须是元组列表,每个元组包含磁盘上文件的名称,以及CAB文件中文件的名称.
文件按照它们在列表中出现的顺序添加到CAB文件中。使用MSZIP压缩算法将所有文件添加到单个CAB文件中.
目前,有关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"
,etc.records应该是一个元组列表,每个元组都包含根据表格架构的所有字段字段。对于可选字段,
None
可以传递字段值可以是二进制类的整数,字符串或实例.
msilib.
add_tables
(database, module)- 添加所有表格内容module到database. module必须包含分析tables列出应添加内容的所有表,以及每个具有实际内容的表的一个属性.
这通常用于安装序列表.
msilib.
add_stream
(database, name, path)- 将文件path添加到
_Stream
的database表中,使用streamname name.
msilib.
gen_uuid
()- 返回一个新的UUID,格式为MSI通常需要的格式(即花括号,大写为所有十六进制).
参见
FCICreateUuidCreateUuidToString
数据库对象
Database.
OpenView
(sql)- 返回一个视图对象,通过调用
MSIDatabaseOpenView()
. sql是要执行的SQL语句.
Database.
Commit
()- 通过调用
MSIDatabaseCommit()
.
Database.
GetSummaryInformation
(count)- 通过调用
MsiGetSummaryInformation()
. count是更新值的最大数量.
Database.
Close
()- 通过
MsiCloseHandle()
.版本3.7.
也可以看看
MSIDatabaseOpenViewMSIDatabaseCommitMSIGetSummaryInformationMsiCloseHandle
查看对象
View.
Execute
(params)- 通过
MSIViewExecute()
执行视图的SQL查询。如果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()
.
参见
MsiViewExecuteMSIViewGetColumnInfoMsiViewFetchMsiViewModifyMsiViewClose
摘要信息对象
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()
.
将修改后的属性写入摘要信息流。另请参阅
MsiSummaryInfoGetPropertyMsiSummaryInfoGetPropertyCountMsiSummaryInfoSetPropertyMsiSummaryInfoPersist
记录对象
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()
.
参见
MsiRecordGetFieldCountMsiRecordSetStringMsiRecordSetStreamMsiRecordSetIntegerMsiRecordClearData
错误
MSI函数周围的所有包装器都会引发MSIError
;theexception里面的字符串将包含更多的细节.
CAB对象
- class
msilib.
CAB
(name) - 类
CAB
代表一个CAB文件。在MSI构建期间,文件将同时添加到Files
表和CAB文件中。然后,添加完所有文件后,可以编写CAB文件,然后添加到MSI文件中.name是MSI文件中CAB文件的名称.
append
(full, file, logical)- 将名为full的文件添加到名为logical的CAB文件中。如果已有一个名为logical的文件,则创建一个新文件名.
返回CAB文件中文件的索引,文件的新名称在CAB文件中.
commit
(database)- 生成一个CAB文件,将其作为流添加到MSI文件中,将其放入
Media
表中,然后删除生成的文件来自磁盘.
目录对象
- class
msilib.
Directory
(database, cab, basedir, physical, logical, default [, componentflags] ) - 在Directory表中创建一个新目录。目录中有一个当前组件,可以通过
start_component()
显式创建,也可以在第一次添加文件时隐式创建。文件被添加到当前组件中,并添加到cab文件中。要创建目录,需要指定基目录对象(可以是None
),物理目录的路径和逻辑目录名。default指定目录表中的DefaultDir插槽。componentflags指定新组件得到的默认标志.start_component
(component=None, feature=None, flags=None, keyfile=None, uuid=None)- 添加一个组件表的条目,并使该组件成为此组件的当前组件目录。如果未给出组件名称,则使用目录名称。如果没有给出feature,则使用当前功能。如果没有给出flags,则使用目录的默认标志。如果没有给出keyfile,则KeyPath在Component表中保留为空.
add_file
(file, src=None, version=None, language=None )- 将文件添加到目录的当前组件,如果没有当前组件,则启动新文件。默认情况下,源和文件表中的文件名将相同。如果指定了src文件,则相对于当前目录进行解释。可选地,可以为File表中的条目指定version和language.
glob
(pattern, exclude=None)- 添加一个globpattern中指定的当前组件的文件列表。单个文件可以排除在exclude列表中
remove_pyc
()- 删除
.pyc
卸载文件.
另请参阅
目录TableFile TableComponent TableFeatureComponents表
功能
- 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的单选按钮控件安装程序属性,当选择单选按钮时设置.
- 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
control.
- 添加并返回
PushButton
控制
radiogroup
(name, x, y, width, height, attributes, property, text, next_control)- 添加并返回
RadioButtonGroup
control.
checkbox
(name, x, y, width, height, attributes, property, text, next_control)- 添加并返回
CheckBox
控制
也可以看看
Dialog TableControl TableControl TypesControlCondition TableControlEvent TableEventMapping TableRadioButton Table
预先计算的表
msilib
提供了一些仅包含schema和tabledefinitions的子包。目前,这些定义基于MSI版本2.0.
msilib.
schema
- 这是MSI 2.0的标准MSI架构,tablesvariable提供表定义列表,_Validation_records为MSI验证提供数据.
msilib.
sequence
- 该模块包含标准序列表的表内容:AdminExecuteSequence, AdminUISequence, AdvtExecuteSequence,InstallExecuteSequence和InstallUISequence.
msilib.
text
- 此模块包含UIText和ActionText表的定义,用于标准安装程序操作.
评论被关闭。