1

我在几个客户站点看到我们的一个补丁出现不寻常的零星故障。最终的错误代码是 1648(无法找到该组补丁的有效序列),这是因为尝试从其中一个补丁转换读取摘要信息流时发生错误 2219(无效的安装程序数据库格式)。但我怀疑这只是早期无声错误的副作用。我们的补丁都使用 MinorUpdateTargetRTM 属性,因此实际上没有什么可排序的,因为任何以前安装的补丁都会自动取代。我们的客户通常使用数百台几乎完全相同的笔记本电脑,并且大多数人都安装了这个更新。在大多数情况下,只有一台设备无法更新。

日志的关键部分如下。初始化已完成,Windows 安装程序服务器进程开始执行执行序列。最后一个正常日志条目是“正在执行操作:ISSetupFilesExtract”。ISSetupFilesExtract 是执行序列中的第一个操作。有三分钟的停顿,然后看起来整个安装以某种方式重置并重新开始。下一个日志条目由客户端进程写入,通常服务器进程将继续运行执行序列。在安装结束之前,我不希望看到来自客户端进程的另一个日志条目。我怀疑这里正在发生某种灾难性故障,但我不知道它可能是什么。只有在发生这种神秘的重置之后,SequencePatches 才会失败。第一次就成功完成了。

MSI (s) (C4:58) [09:28:32:565]: Doing action: INSTALL
Action start 9:28:32: INSTALL.
MSI (s) (C4:58) [09:28:32:581]: Running ExecuteSequence
MSI (s) (C4:58) [09:28:32:581]: Transforming table InstallExecuteSequence.
MSI (s) (C4:58) [09:28:32:581]: Transforming table InstallExecuteSequence.
MSI (s) (C4:58) [09:28:32:581]: Note: 1: 2262 2: InstallExecuteSequence 3: -2147287038 
MSI (s) (C4:58) [09:28:32:581]: Doing action: ISSetupFilesExtract

<-- What happened here?! -->

=== Verbose logging started: 7/21/2014  9:31:38  Build type: SHIP UNICODE 5.00.7601.00  Calling process: C:\MyCompany\Pwhc\Apps\AplPch.exe ===
MSI (c) (44:50) [09:31:38:192]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

我的问题是,有谁知道是什么导致安装过程像这样“重置”,我能做些什么吗?正如我所说,这个补丁在 99% 的时间里正常安装。可获取故障机器的完整日志:https ://docs.google.com/document/d/1LK6HdIcetKOGqFbi5nGKAuDolvhZ3PcLxzJHv2wNDsQ/pub 。谢谢。

回应评论的附加信息:

我们的产品将 MSI 用于服务包版本,将补丁用于点版本。每个补丁都是累积的,并通过 MinorUpdateTargetRTM 属性取代所有以前的补丁。它们主要用于更新应用程序文件。我们始终包含整个文件以提高可靠性,并且不使用位级补丁。基本 MSI 为 46 MB,包含 1778 个文件(这是一个复杂的企业产品)。失败的补丁非常大,57 MB。它添加了 240 个新文件并更新了 413 个现有文件。

4

1 回答 1

1

听起来您确实在有效地使用补丁,但您肯定违反了我对补丁的第一条规则:它应该小于其基本 MSI

原因很简单,补丁只是已经运行的更新的一种交付机制。因此,它只是一个比原始设置本身更复杂且更容易出错的容器,当它的大小超过原始 MSI 时,根本没有明显的理由使用补丁?您可以在不修改的情况下运行完整设置吗?事实上,您应该在出现问题的系统上进行尝试。

也许我错过了一些重要的东西?也许它安装得更快?精心编写的次要升级,或不卸载并重新安装但只是取消注册旧版本(RemoveExistingProducts 的后期排序)的主要升级应该同样快。

尽管拥有多年的经验和部署专业知识,但我并不是修补专家。我积极尝试尽量减少补丁的使用,因为它通常比它的价值更麻烦。但这里有一个帖子,里面有我的一些修补经验

如果这似乎根本没有答案,我深表歉意,但我认为这是一个有效的输入,因为您的补丁在 57MB 时似乎没有必要,而且您肯定已经有了解决方法:完整更新 MSI。

于 2014-07-24T20:38:26.910 回答