构建 ICE

如果在 ICE 参考中列出的现有 ICE 自定义操作中找不到所需的内部一致性评估程序,则需要准备自己的 ICE 来验证包。

创作 ICE 自定义操作时,应执行以下操作:

  • 仅在显示的表中列出的类型的自定义操作的基础上使用 ICE。
  • 调用 MsiProcessMessage 并帖子消息INSTALLMESSAGE_USER类型。 创作 ICE 消息时,请按照 ICE 消息指南中的消息格式进行操作。
  • 编写 ICE,以便捕获任何 API 错误,并且始终返回ERROR_SUCCESS。 这是允许后续自定义操作在 ICE 失败后运行所必需的。

ICE 自定义操作仅限于以下自定义操作类型。

自定义操作类型 说明
自定义操作类型 1 二进制流中的 DLL
自定义操作类型 2 二进制流中的 EXE
自定义操作类型 5 二进制流中的JScript
自定义操作类型 6 二进制流中的 VBScript
自定义操作类型 37 将代码JScript为字符串
自定义操作类型 38 VBScript 代码作为字符串

 

创作 ICE 自定义操作时,请不要执行以下操作:

  • 不要假定 ICE 接收的引擎的句柄是安装程序数据库的安装实例。 如果不是安装实例,则未定义某些属性、未解析源目录和目标目录,并且未定义当前功能状态。
  • 不要依赖任何安装程序操作、自定义操作或其他 ICE 的先前执行或非执行。 由于以前的 ICE 可能在任何表中创建了临时列,因此作者应尽可能按名称引用列。 ICE 应在退出之前清理任何临时列或表。
  • 不要假定作者有权访问数据库的源目录的图像。
  • 不要假定对数据库所做的更改不会持久保存。

C++ 中的 ICE 示例

VBScript 中的 ICE 示例