首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

msilib

2.5版本中的新功能。

msilib支持创建Microsoft Installer(.msi)文件。 因为这些文件通常包含一个嵌入式“cabinet”文件(.cab),所以它还公开了一个API来创建CAB文件。 读取.cab文件的支持目前尚未实施; 读取对.msi数据库的支持是可能的。

这个包旨在提供对.msi文件中所有表的完整访问,因此它是一个相当低级的API。 该软件包的两个主要应用程序是distutils命令bdist_msi,以及创建Python安装程序包本身(尽管它目前使用不同版本的msilib)。

包内容大致可以分为四个部分:低级CAB例程,低级MSI例程,高级MSI例程和标准表结构。

msilib.FCICreate(cabname, files)

创建一个名为cabname 的新CAB文件。文件必须是元组列表,每个元组包含磁盘上文件的名称和CAB文件内的文件名称。

这些文件按照它们出现在列表中的顺序添加到CAB文件中。使用MSZIP压缩算法将所有文件添加到单个CAB文件中。

针对MSI创建的各个步骤的Python回调函数目前尚未公开。

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)

创建并返回一个新的数据库名称,使用模式 初始化它,并设置属性ProductNameProductCodeProductVersionManufacturer

模式必须是包含表和_Validation_records属性的模块对象; 通常应使用msilib.schema。

该函数返回时,数据库将只包含模式和验证记录。

msilib.add_data(database, table, records)

将所有记录 添加到数据库 中名为table的表中。

所述参数必须是在MSI模式中的预定义的表中的一个,例如'Feature''File''Component''Dialog''Control',等。

记录 应该是一个元组列表,每个元组包含根据表的模式记录的所有字段。对于可选字段,None可以通过。

字段值可以是int或long数字,字符串或Binary类的实例。

class msilib.Binary(filename)

代表二进制表中的条目; 插入这样一个对象使用add_data()读取名为文件名的文件 到表中。

msilib.add_tables(database, module)

将所有表格内容从模块 添加到数据库模块 必须包含一个属性,其中列出了应为其添加内容的所有表以及每个具有实际内容的表的一个属性。

这通常用于安装序列表。

msilib.add_stream(database, name, path)

使用流名称将文件路径添加到数据库的_Stream表中。

msilib.gen_uuid()

返回一个新的UUID,格式为MSI通常要求的格式(例如花括号,所有的十六进制都是大写)。

扩展内容

1.数据库对象

Database.OpenView(sql)

通过调用返回一个视图对象MSIDatabaseOpenView()sql 是要执行的SQL语句。

Database.Commit()

通过调用MSIDatabaseCommit()提交当前事务中的挂起更改。

Database.GetSummaryInformation(count)

通过调用MsiGetSummaryInformation()返回一个新的摘要信息对象。 count是更新值的最大数量。

扩展内容

2.查看对象

View.Execute(params)

通过MSIViewExecute()执行视图的SQL查询。 如果params不是None,它是描述查询中参数标记的实际值的记录。

View.GetColumnInfo(kind)

通过调用MsiViewGetColumnInfo()返回描述视图的列的记录。 kind可以是MSICOLINFO_NAMES或MSICOLINFO_TYPES。

View.Fetch()

通过调用MsiViewFetch()返回查询的结果记录。

View.Modify(kind, data)

通过调用修改视图MsiViewModify()一种 可以是一个MSIMODIFY_SEEKMSIMODIFY_REFRESHMSIMODIFY_INSERTMSIMODIFY_UPDATEMSIMODIFY_ASSIGNMSIMODIFY_REPLACEMSIMODIFY_MERGEMSIMODIFY_DELETEMSIMODIFY_INSERT_TEMPORARYMSIMODIFY_VALIDATEMSIMODIFY_VALIDATE_NEWMSIMODIFY_VALIDATE_FIELD,或MSIMODIFY_VALIDATE_DELETE

data 必须是描述新数据的记录。

View.Close()

关闭视图,通过MsiViewClose()

扩展内容

3.摘要信息对象

SummaryInformation.GetProperty(field)

通过返回摘要的属性MsiSummaryInfoGetProperty()字段 是属性的名称,并且可以是一个常量PID_CODEPAGEPID_TITLEPID_SUBJECTPID_AUTHORPID_KEYWORDSPID_COMMENTSPID_TEMPLATEPID_LASTAUTHORPID_REVNUMBERPID_LASTPRINTEDPID_CREATE_DTMPID_LASTSAVE_DTMPID_PAGECOUNTPID_WORDCOUNTPID_CHARCOUNTPID_APPNAME,或PID_SECURITY

SummaryInformation.GetPropertyCount()

通过MsiSummaryInfoGetPropertyCount()。返回摘要属性的数量。

SummaryInformation.SetProperty(field, value)

通过设置属性MsiSummaryInfoSetProperty()字段 可以具有与in相同的值GetProperty()value是该属性的新值。可能的值类型是整数和字符串。

SummaryInformation.Persist()

使用修改后的属性写入摘要信息流 MsiSummaryInfoPersist()

扩展内容

4.记录对象

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

通过MsiRecordClearData()将记录的所有字段设置为0。

扩展内容

5.错误

MSI功能的所有包装都会增加MsiError; 异常中的字符串将包含更多细节。

6. CAB对象

class msilib.CAB(name)

CAB类代表一个CAB文件。 在MSI构建过程中,文件将同时添加到Files表格和CAB文件中。 然后,当添加完所有文件后,可以编写CAB文件,然后将其添加到MSI文件中。

name 是MSI文件中CAB文件的名称。

append(full, file, logical)

添加与路径的文件完整 的CAB文件,名称下的逻辑。如果已经有一个名为logical的文件,则会创建一个新的文件名。

返回CAB文件中的文件的索引以及CAB文件内的文件的新名称。

commit(database)

生成CAB文件,将其作为流添加到MSI文件,将其放入媒体表中,并从磁盘中移除生成的文件。

7.目录对象

class msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])

在目录表中创建一个新的目录。 目录中每个时间点都有一个当前组件,可以通过start_component()明确创建,也可以在第一次添加文件时隐式创建。 文件被添加到当前组件中,并被添加到cab文件中。 要创建目录,需要指定一个基本目录对象(可以是None),物理目录的路径和逻辑目录名称。 default指定目录表中的DefaultDir插槽。 componentflags指定新组件获取的默认标志。

start_component([component[, feature[, flags[, keyfile[, uuid]]]]])

将一个条目添加到Component表中,并将此组件作为此目录的当前组件。如果没有给出组件名称,则使用目录名称。如果没有功能被赋予,则使用当前功能。如果没有标志给出,将使用目录的缺省标志。如果没有给出密钥文件,KeyPath在Component表中保留为空。

add_file(file[, src[, version[, language]]])

将文件添加到目录的当前组件,如果没有当前组件,则启动一个新文件。默认情况下,源文件和文件表中的文件名称是相同的。如果指定了src文件,则会相对于当前目录进行解释。或者,可以为File表中的条目指定版本语言

glob(pattern[, exclude])

按照glob模式中的指定将文件列表添加到当前组件。排除 列表中可以排除单个文件。

remove_pyc()

在卸载时删除.pyc/ .pyo文件。

扩展内容

8.特点

class msilib.Feature(database, id, title, desc, display[, level=1[, parent[, directory[, attributes=0]]]])

使用值id,parent.id,标题,desc,显示,级别,目录和属性向Feature表添加新记录。 生成的要素对象可以传递给Directory的start_component()方法。

set_current()

使此功能成为msilib的当前功能。 新组件会自动添加到默认功能中,除非明确指定了功能。

扩展内容

9. GUI类

msilib提供了几个将GUI表包装在MSI数据库中的类。 但是,没有提供标准的用户界面; 使用bdist_msi创建带用户界面的MSI文件来安装Python包。

class msilib.Control(dlg, name)

对话框控件的基类。dlg是控件所属的对话框对象,name是控件的名称。

event(event, argument[, condition=1[, ordering]])

ControlEvent为此控件输入表格。

mapping(event, attribute)

EventMapping为此控件输入表格。

condition(action, condition)

ControlCondition为此控件输入表格。

class msilib.RadioButtonGroup(dlg, name, property)

创建一个名为name 的单选按钮控件。属性 是选择单选按钮时设置的安装程序属性。

add(name, x, y, width, height, text[, value])

将名为name 的单选按钮添加到组中,坐标为xy宽度高度和标签文本。如果被省略,则默认为名称

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)

返回一个新的控制对象。 控制表中的条目由指定的参数构成。

这是一种通用的方法; 对于特定的类型,提供了专门的方法。

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控件。

扩展内容

10.预先计算的表格

msilib提供了几个仅包含模式和表定义的子包。目前,这些定义基于MSI 2.0版。

msilib.schema

这是MSI 2.0的标准MSI模式,其中tables变量提供表定义列表,而_Validation_records提供MSI验证数据。

msilib.sequence

该模块包含标准序列表的表格内容:AdminExecuteSequenceAdminUISequenceAdvtExecuteSequenceInstallExecuteSequenceInstallUISequence

msilib.text

此模块包含标准安装程序操作的UIText和ActionText表的定义。

扫码关注腾讯云开发者

领取腾讯云代金券