我所有的 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/