【问题标题】:Building Patch does not include file which was added in previous patch package构建补丁不包含之前补丁包中添加的文件
【发布时间】:2023-09-17 00:23:01
【问题描述】:

在已经发布的 patch1 中,我添加了一个在原始基础包中不存在的文件。那工作得很好。在 patch2 中,它也运行良好。然而,在 patch3 中,这个文件并没有内置到补丁中。 使用 Orca 的 View Patch,当我将 patch3 应用到基本 MSI 时,我确实没有看到新文件“添加”到 PatchCreation.log 的文件表中。然而,在前两个补丁中,我在 File 表中看到了这个“添加”条目,正如预期的那样。

在问题补丁的 PatchCreatin.log 文件中: 我看到两个与此文件相关的“比较文件”条目,每个条目对应于以前的未压缩 MSI 版本:

INFO Comparing Files: PathTo3.0.1UncompressedMsi\file1.exe PathToLatestUncompressedMsi\file1.exe...
INFO Different sizes...
INFO File Key: file1.exe.e is modified

INFO Comparing Files: PathTo3.0.2UncompressedMsi\file1.exe PathToLatestUncompressedMsi\file1.exe...
INFO Different sizes...
INFO File Key: file1.exe.e is modified

使用我构建并已发布的第二个补丁(再次,它运行良好),我看到了类似的日志记录,关于比较最新 MSI 中的文件与第一个补丁 MSI 中的文件:

INFO Comparing Files: PathTo3.0.1UncompressedMsi\file1.exe PathToLatestUncompressedMsi\file1.exe...
INFO Different sizes...
INFO File Key: file1.exe.e is modified

就 PatchWiz 对“不同大小”和“已修改”的处理方式而言,我不确定日志条目的含义。我认为这意味着它将包含在补丁中。然而事实并非如此。 是否甚至可以在这些 patchwiz 日志中搜索一个条目,以确认类似“啊,我看到你想要在补丁中添加这个,我会添加它” ??

我还确认所有补丁的未压缩 MSI 显示,使用 Installshield 的 MSI Diff,文件 (file1.exe.e) 已添加到文件表中。所以至少在那个方面, 用于创建补丁的未压缩 MSI 版本似乎按预期工作。

即使我们无法弄清楚这里出了什么问题,还有其他方法可以将文件“强制”到补丁包中吗?注意:我没有使用“二进制”补丁,我正在使用包含完整文件补丁

更新:物理文件实际上可能在补丁中,因为当我安装时日志显示:

Note: 1: 2715 2: file1.exe

意思是

The specified File key ('[2]') not found in the File table.

这是否意味着 makecab 将文件放在那里,但是条目从未添加到数据库中?如果是这样,这是否意味着我可以在数据库中手动添加适当的表关系?

这令人困惑,因为我在日志中看到了我已经发布的早期补丁的相同条目,这些补丁确实可以正常工作..

【问题讨论】:

  • 我认为这取决于该文件是否具有文件版本。如果它是版本化的,那么补丁工具会将新版本中的版本与基础版本进行比较,我很确定如果版本较低,它们将不会包含它。那是因为应用补丁时文件版本控制规则不会替换已安装的文件,因此安装补丁没有意义。
  • 我以前遇到过,但这次没有

标签: windows-installer installshield patch


【解决方案1】:

问题在于通过 Installshield IDE 添加以前的设置。在添加我之前的第三个设置时,InstallShield 将其 Order 列的值与原始设置的值交换,从而创建了 Microsoft 所谓的“不常见”(我会说,不正确..)补丁序列:

http://msdn.microsoft.com/en-us/library/aa372066(v=vs.85).aspx

顺序栏:目标图片的相对顺序。因为多 目标可以修补到升级的图像,订单字段提供 一种对补丁变换列表中的变换进行排序的方法。 通常,顺序是从最旧到最新的图像。

不确定这是否是他们设计的。要修复它,我必须手动编辑 .ism 文件来调整顺序(这不是一个可读性很强的架构)。

【讨论】: