从自定义操作内部访问当前安装程序会话
调用动态链接库或脚本的非延迟自定义操作可以访问正在运行的安装,以查询或修改当前安装会话的属性。 每个进程只能存在一个 Session 对象,并且自定义操作脚本不得尝试创建另一个会话。
自定义操作只能在数据库中添加、修改或删除临时行、列或表。 自定义操作无法修改数据库中的永久性数据,例如,作为存储在磁盘上的数据库的一部分的数据。
若要访问正在运行的安装,将向调用动态链接库 (DLL) 的自定义操作传递当前会话的类型 MSIHANDLE 的句柄作为在 CustomAction 表的 Target 列中命名的 DLL 入口点的唯一参数。 由于安装程序提供了此句柄,因此自定义操作不应将其关闭,例如,为了从安装程序接收句柄 hInstall,自定义操作函数的声明如下。
UINT __stdcall CustomAction(MSIHANDLE hInstall)
若要对当前数据库进行只读访问,请通过调用 MsiGetActiveDatabase 获取数据库句柄。 有关详细信息,请参阅获取数据库句柄。
采用 VBScript 或 JScript 编写的自定义操作可以使用 Session 对象访问当前安装会话。 安装程序创建一个名为“Session”的 Session 对象,该对象引用当前安装。 若要对当前数据库进行只读访问,请使用 Session 对象的 Database 属性。
由于脚本是从 Session 对象的上下文运行的,因此并不总是需要完全限定属性和方法。 在以下示例中,在使用 VBScript 时,Me 引用可以替换 Session 对象,例如,以下三行是等效的。
Session.SetInstallLevel 1
Me.SetInstallLevel 1
SetInstallLevel 1
无法从调用使用命令行启动的可执行文件的自定义操作(例如自定义操作类型 2 和自定义操作类型 18)访问当前安装程序会话。
无法从延迟执行自定义操作访问当前安装程序会话或所有属性数据。 有关详细信息,请参阅获取延迟执行自定义操作的上下文信息。
相关主题