自定义操作类型 1

此自定义操作调用以 C 或 C++ 编写的动态链接库 (DLL)。

DLL 是从临时二进制流生成的。 CustomAction 表的 Source 字段包含指向 Binary 表的键。

Binary 表中的 Data 列包含流数据。 为每行分配一个单独的流。 可从文件插入新的二进制数据,方式是先使用 MsiRecordSetStream,再使用 MsiViewModify,将记录插入表中。 调用自定义操作时,流数据会复制到临时文件中,然后根据自定义操作的类型处理该临时文件。

类型值

将以下标志位包含在 CustomAction 表的 Type 列中,以指定基本数值类型。

常量 十六进制 十进制
msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData 0x001 1

 

目标

DLL 通过 CustomAction 表的 Target 字段中指定的入口点调用,传递单个参数,即当前安装会话的句柄。 表中指定的入口点名称必须与从 DLL 导出的入口点名称匹配。 请注意,如果入口函数不是由 .DEF 文件或 /EXPORT: 链接器规范指定的,则名称可能有前导下划线和“@4”后缀。 调用的函数必须指定 __stdcall 调用约定。

返回处理选项

CustomAction 表的 Type 列中添加可选标志位,以指定返回处理选项。 有关这些选项和值的说明,请参阅自定义操作返回处理选项

执行计划选项

CustomAction 表的 Type 列中包含可选标志位,以指定执行计划选项。 这些选项控制自定义操作的多次执行。 有关这些选项的说明,请参阅自定义操作执行计划选项

脚本内执行选项

CustomAction 表的 Type 列中添加可选标志位,以指定脚本内执行选项。 这些选项将操作代码复制到执行、回滚或提交脚本中。 有关这些选项的说明,请参阅自定义操作脚本内执行选项

返回值

请参阅自定义操作返回值

备注

调用动态链接库 (DLL) 的自定义操作需要安装会话的句柄。 如果这也是一个延迟执行自定义操作,则在安装脚本执行期间,该会话可能不再存在。 要了解此类型的自定义操作如何获取上下文信息,请参阅获取延迟执行自定义操作的上下文信息

导出数据库表时,每个流都会写成一个单独的文件放入以表命名的子文件夹中,使用主键作为文件名(Binary 表的 Name 列),默认扩展名为“.ibd”。 如果文件系统或版本控制系统不支持长文件名,则名称应使用 8.3 格式。 永久性存档文件将流数据替换为使用的文件名,这样在导入表时可以找到该数据。

Custom_Actions

动态链接库

获取延迟执行自定义操作的上下文信息