创作自定义操作

下表列出了用于满足示例规范的五个自定义操作:ProcessAccounts、UninstallAccounts、CreateAccounts、RemoveAccounts 和 RollbackAccounts。 所有这些自定义操作都位于存储在 Binary 表中的动态链接库中。 Windows Installer SDK 中提供了动态链接库的 C++ 源代码,其中包含自定义操作示例。 ProcessAccounts 和 UninstallAccounts 位于 Process.cpp 文件中。 CreateAccount 位于 Create.cpp 文件中。 RemoveAccount 和 RollbackAccount 位于 Remove.cpp 文件中。 这些源文件可用于创建 Process.dll、Create.dll 和 Remove.dll 文件。

由于创建或删除用户帐户需要提升权限,因此必须使用在系统上下文中运行的延迟执行自定义操作来创建、删除或回滚用户帐户。 即刻执行的自定义操作 ProcessAccounts 和 UninstallAccounts 将生成可创建、删除或回滚用户帐户的延迟自定义操作:CreateAccount、RemoveAccount 和 RollbackAccount。

由于延迟自定义操作无法读取数据库表中的信息,因此 ProcessAccounts 和 UninstallUserAccouts 必须设置 CustomActionData 属性,以便将 UserAccounts 表中的信息传递给延迟自定义操作,如获取延迟执行自定义操作的上下文信息中所述。 安装程序运行执行脚本时,延迟自定义操作根据 CustomActionData 属性中的信息处理用户帐户。

由于所有自定义操作都位于动态链接库,而这些库存储在 Binary 表中,因此这些自定义操作都在其基数值类型中包含常量 msidbCustomActionTypeDll 和 msidbCustomActionTypeBinaryData。 ProcessAccounts 和 UninstallAccounts 是纯自定义操作类型 1 的示例。 有关其他自定义操作类型的信息,请参阅所有自定义操作类型的摘要列表

CreateAccount 和 RemoveAccount 是延迟执行自定义操作,不允许服务模拟特定用户。 这些自定义操作包括常量 msidbCustomActionTypeInScript 和 msidbCustomActionTypeNoImpersonate,用于指定这些自定义操作的脚本内执行选项

RollbackAccount 是一种回滚自定义操作,在回滚安装期间仅移除用户帐户。 RollbackAccount 包括常量 msidbCustomActionTypeInScript 和 msidbCustomActionTypeRollback,用于指定这些自定义操作的脚本内执行选项

这些自定义操作可能会处理敏感数据,例如用户密码,不应将其写入日志文件。 因此,延迟自定义操作应在自定义操作类型中包含 msidbCustomActionTypeHideTarget。 由于即刻自定义操作使用 CustomActionData 属性将数据传递给延迟自定义操作的方式,因此还需要将延迟自定义操作的名称添加到 Property 表中的 MsiHiddenProperties 属性列表中。

自定义操作 DLL 入口点 自定义操作类型
ProcessAccounts Process.dll 中的 ProcessUserAccounts。 msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData = 1
UninstallAccounts Process.dll 中的 UninstallUserAccounts。 msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData = 1
CreateAccount Create.dll 中的 CreateUserAccount。 msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate + msidbCustomActionTypeHideTarget = 11265.
RemoveAccount Remove.dll 中的 RemoveUserAccount。 msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate + msidbCustomActionTypeHideTarget = 11265.
RollbackAccount Remove.dll 中的 RemoveUserAccount。 msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeRollback + msidbCustomActionTypeHideTarget = 9473.

 

继续了解创作 CustomAction 表