windows-installer - MSI 验证返回 "ICE81 Failure ICE Internal Error 1867. API Returned: 1615."

标签 windows-installer installshield-2012 orca

我所有的 MSI 安装在验证期间都显示相同的 ICE81“失败”,但我无法弄清楚是什么原因造成的。无论我使用哪个 MSI 编辑器运行验证(MS Orca、Flexera InstallShield、InstEdit.com),它都会发生。我的所有安装包都使用位于正确位置(与 MSI 文件相同的文件夹)的外部 CAB 文件,并且所有 CAB 文件都使用与 MSI 文件签名相同的数字签名(以及媒体、MsiDigitalCertificate、MsiDigitalSignature、和 MsiPatchCertificate 表似乎已正确编写)。

ICE81 Failure ICE Internal Error 1867. API Returned: 1615.     MSIEditor_full_path\darice.cub
ICE81 Failure Error 2228: C:\Users\my_user_name\AppData\Local\Temp\random_tmp_filename.tmp, feature_name, SELECT `DiskId`, `Cabinet` FROM `Media` WHERE (`DiskId` = cab_name.cab)     MSIEditor\darice.cub

有什么想法吗?

最佳答案

错误是 ERROR_BAD_QUERY_SYNTAX,意思是“SQL 查询语法无效或不受支持”。因此,ICE 为验证您的 MSI 而进行的内部 SQL 查询失败了。查看查询,唯一可能失败的部分是查询:WHERE DiskId=cab_name.cab

仔细观察,问题是 cab_name.cab 是一个字符串,这意味着它应该用单引号引起来。换句话说,它应该类似于:'cab_name.cab'。那么为什么 ICE 没有正确地引用字符串呢?嗯,这就是答案。

Media 表的 DiskId 列应该是一个数字。 cab_name.cab 以某种方式被插入到 Media 表的第一列中,而该表中应该是数字(如 1)。 ICE 不会在 DiskId 周围加上引号,因为它需要一个数字,而数字不应该被引用。

要修复,请将 Media 表的 DiskId(第一)列更改为正数(我喜欢 1)并将cab_name.cab Cabinet(第四)列中的值。

我不确定哪些工具允许您将字符串放入整数列,但您可能会向他们发送一个错误,因为各种事情都不起作用。 :)

关于windows-installer - MSI 验证返回 "ICE81 Failure ICE Internal Error 1867. API Returned: 1615.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16343914/

相关文章:

wix - 利用 heat.exe 并获取已本地化的文件名,并使用 wix 将它们包含到 msi 中

c++ - 如何创建自定义操作来更改文件权限

linux - 是否可以在 Linux 上以编程方式更改 msi 的数据库

windows-installer - 开源 "windows"安装程序

encoding - WiX 安装程序 heat.exe 和非 ASCII 文件名

visual-studio-2012 - 无法在 InstallShield 2012 Limited Edition 中创建非广告快捷方式

windows-installer - 在执行卸载之前停止 Windows 服务

windows - 如何安装 Orca - 哪些 Windows SDK 包含 Orca MSI 编辑工具?

command-line - 使用 WiX 安装 Powershell 脚本

32bit-64bit - 安装盾2012 : Identify 32 or 64 bit Operating system and install appropriate ActiveX control - Basic msi installer