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 )- 添加并返回
Linecontrol.
- 添加并返回
PushButton控制
radiogroup(name, x, y, width, height, attributes, property, text, next_control)- 添加并返回
RadioButtonGroupcontrol.
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表的定义,用于标准安装程序操作.
评论被关闭。