构建 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 示例