我需要使用带有 Installshield 2012 的 Patch Design 创建的一系列可卸载补丁。前两个补丁在卸载时工作正常。然而,第三个补丁,当且仅当在补丁 1 和/或补丁 2 已经应用时卸载,会产生错误:
MSI (c) (48:C4) [19:02:54:135]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
Error 1308.Source file not found: {pathToFile}. Verify that the file exists and that you can access it.
其中有 26 个关于不同文件的错误。文件或组件没有明显的模式,或者没有特征
注意:如果我只应用了补丁 3,卸载不会产生此错误..
我在补丁设计中使用相同的选项创建了所有三个补丁。我理解的唯一明显区别是补丁 3 包含比前两个更多的更改(文件更新)。让我重复一遍:更多的变化。
我的问题是:
为什么只有在安装了一系列补丁的情况下才会发生这种情况,而不仅仅是第三个补丁本身?
为了防止补丁卸载尝试从构建补丁时仅用于设计时的位置获取文件,我必须做些什么?或者也许这是设计使然,但是缓存太重或太混乱了..?
更新 - 更多信息(由 Glytzhkof 请求):该补丁包含 96 个文件更改,大约是基本 MSI 软件包大小的一半。它实际上与“开发”分支工作无关。添加了几个新文件。有些最初被删除(当我发现我们真的在做补丁时不得不把它们放回去......)。如果我再描述这种情况,可能会冒犯您作为该领域的专业人士。
我一直在尝试销售主要升级,只需对安装程序进行一些调整即可使其不再需要补丁。我们产品的卸载需要参数才能使其成为非交互式(我们需要此参数才能在主要升级方案中工作,它目前只是卸载序列的一部分)。这是唯一真正的问题——但解决它会付出很多。但是,决定不解决该问题。我尝试在每次迭代中“解决”这个问题。没有骰子。有人告诉我,我们需要主要版本的补丁 - 所以在这里我试图让尾巴摇摆不定。
是的,补丁可以更快(让我在这里扮演魔鬼的拥护者)。但真的,30 秒和 90 秒之间的区别,这些东西什么时候自动部署?是的,我还考虑通过调整文件成本来优化安装程序,以查看它是否会使其更快,但即便如此,我相信还有另一个原因会要求提供补丁。
另一个更新:1308 错误中提到的文件不在目标系统的%windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI??}
文件夹。这可能会导致 1308,因为如果我从此缓存中删除更多文件,我会得到与丢失文件相对应的相同错误。问题可能是,为什么不是所有文件都在这个PatchCache文件夹中?