自定义操作类型 17

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

DLL 在当前会话期间随应用程序一起安装。 CustomAction 表的“源”字段包含 File 表的键。 自定义操作代码的位置取决于对该文件的目标路径的解析,因此,必须在安装此文件之后且删除文件之前调用此自定义操作。

类型值

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

常量 十六进制 十进制
msidbCustomActionTypeDll + msidbCustomActionTypeSourceFile 0x011 17

 

目标

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

返回处理选项

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

执行计划选项

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

脚本内执行选项

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

返回值

请参阅自定义操作返回值

备注

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

自定义操作在单独的线程中执行,并且对系统的访问权限可能受限。 异步运行的自定义操作在当前序列或安装会话终止时阻塞主线程,直到自定义操作恢复。

引用已安装文件作为其源的自定义操作(例如自定义操作类型 17 (DLL))必须遵守以下顺序限制:

  • 自定义操作必须排在 CostFinalize 操作之后。 这样,自定义操作就可以解析查找 DLL 所需的路径。
  • 如果源文件尚未安装在计算机上,则必须将这种类型的延迟(脚本内)自定义操作排在 InstallFiles 操作之后。
  • 如果源文件尚未安装在计算机上,则必须将这种类型的非延迟自定义操作排在 InstallFinalize 操作之后。

Custom_Actions

延迟执行自定义操作

动态链接库