Windows installer MSI验证返回”;ICE81故障ICE内部错误1867。退回的空气污染指数:1615。”;
我的所有MSI安装在验证期间都显示相同的ICE81“失败”,但我无法找出原因。无论我使用哪个MSI编辑器运行验证(MS Orca、Flexera InstallShield、InstEdit.com),都会发生这种情况。我的所有安装包都使用位于正确位置的外部CAB文件(与MSI文件相同的文件夹),并且所有CAB文件都使用MSI文件所用的相同数字签名进行签名(并且媒体中的所有记录、MSIDgitalCertificate、MSIDgitalSignature和MsiPatchCertificate表似乎都编写正确)Windows installer MSI验证返回”;ICE81故障ICE内部错误1867。退回的空气污染指数:1615。”;,windows-installer,installshield-2012,orca,Windows Installer,Installshield 2012,Orca,我的所有MSI安装在验证期间都显示相同的ICE81“失败”,但我无法找出原因。无论我使用哪个MSI编辑器运行验证(MS Orca、Flexera InstallShield、InstEdit.com),都会发生这种情况。我的所有安装包都使用位于正确位置的外部CAB文件(与MSI文件相同的文件夹),并且所有CAB文件都使用MSI文件所用的相同数字签名进行签名(并且媒体中的所有记录、MSIDgitalCertificate、MSIDgitalSignature和MsiPatchCertificate
有什么想法吗?错误是
error\u BAD\u QUERY\u SYNTAX
,意思是“SQL查询语法无效或不受支持”。因此,ICE为验证MSI而进行的内部SQL查询失败。查看查询,唯一可能失败的部分是查询:WHERE DiskId=cab\u name.cab
仔细看问题是,cab\u name.cab
是一个字符串,意味着它应该用单引号括起来。换句话说,它应该看起来像:'cab\u name.cab'
。那么为什么ICE没有正确引用字符串呢?嗯,这就是答案
Media
表的DiskId
列应该是一个数字。不知何故,cab\u name.cab
被插入到Media
表的第一列中,在那里需要一个数字(如1
)。ICE不会在磁盘ID
周围加引号,因为它需要一个数字,而数字不应该加引号
要修复此问题,请将Media
表的DiskId
(第一)列更改为正数(我喜欢1
),并将cab\u name.cab
值放入Cabinet
(第四)列
我不确定是什么工具允许您将字符串放入整数列中,但您可能会向它们发送一个错误,因为各种事情都不起作用。:) 多年来,我们的MSI软件包一直存在这个问题。我有相同的设置:所有包都使用位于正确位置的外部CAB文件,并使用与MSI包签名相同的数字签名进行签名。我们使用InstallShield构建软件包(从IS Developer 2010开始,经过多次升级,目前使用IS Premier 2020)。所有版本都使用darice.cub进行验证(我相信最终来自微软) 我观察到,如果我从MSI包中删除3个数字签名表(MSIDgitalCertificate、MSIDgitalSignature和MsiPatchCertificate),这种行为就会消失。当然,这些都是发布签名包所必需的,因此删除它们确实不是一个选项。我只是指出,如果我删除了它们,然后运行验证,那么就不会再遇到失败通知(“ICE81故障ICE内部错误1867.API返回:1615”) 简言之,darice.cub可能仍然存在问题,但这只是使用数字签名对包进行签名时的问题。这会让我相信它与darice.cub ICE81验证检查生成的SQL语句无关,而是与在包签名时访问表有关
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