Joh*_*Zaj 2 windows-installer installshield patch msi-patch
我需要使用Patch Design和Installshield 2012创建一系列可卸载的补丁.前两个补丁在卸载时工作正常.但是,第三个补丁,当且仅当已经应用补丁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.
Run Code Online (Sandbox Code Playgroud)
关于不同的文件有26个这样的错误.文件或组件或功能没有明显的模式
注意:如果我只应用了补丁3,卸载不会产生此错误.
我在Patch Design中使用相同的选项创建了所有三个补丁.我理解的唯一明显的区别是补丁3包含比前两个更多的更改(文件更新).让我再说一遍:更多的变化.
我的问题是:
为什么只在安装了一系列补丁的情况下才会发生这种情况,而不仅仅是第三个补丁本身?
为了防止修补程序卸载尝试从构建修补程序时仅用于设计时的位置获取文件,我该怎么办?或者这可能是设计中的提取,但缓存太过重载或混淆..?
更新 - 更多信息(由Glytzhkof请求):补丁包含96个文件更改,大约是基本MSI包大小的一半.它实际上是在'Dev'分支工作之外.添加了几个新文件.有些人最初被删除了(当我发现我们真的在做补丁时,不得不把它们放回去......).如果我不再描述这种情况,它可能会冒犯你作为该领域的专业人士.
我一直在尝试销售大型升级,只需要对安装程序进行一些调整就可以使其过时需要补丁.卸载我们的产品需要参数,以便它是非交互式的(我们需要此参数在Major Upgrade场景中工作,它目前只是卸载序列的一部分).这是唯一真正的问题 - 但修复它会支付成本.然而,决定不解决这个问题.我尝试在每次迭代时"碰撞"这个问题.没有骰子.我告诉我们需要主要版本的补丁 - 所以在这里我试图让尾巴摇尾巴.
是的,补丁可以更快(让我在这里扮演魔鬼的拥护者).但实际上,30到90秒之间的差异,当这些东西自动部署时?是的,我还考虑通过调整文件成本来找到优化安装程序的方法,看看它是否能让它变得更快,但即使这样,我也确定会有另一个原因要求修补程序.
另一个更新:1308错误中提到的文件不在目标系统上 %windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI??}
夹.这可能会导致1308,因为如果我从此缓存中删除更多文件,我会得到与丢失文件相对应的相同错误.问题可能是,为什么不是这个PatchCache文件夹中的所有文件?
我仍在寻找解决方案或至少一些指导,即使我同意这不属于正常的良好做法. - jJack 1小时前
我无法访问我的部署工具,但我会尝试提供透视图.由于我没有完全掌握你写的所有方面,因此将是通用评论.我希望它至少与你提出的问题有关.我写的时候它变成了一个博客.
对我来说,MSI补丁对2种基本场景有效:
出于这两个目的,我已经多次专业地使用MSI修补.在每种情况下都没有其他好的解决办法.修补IMHO用于"修复" - 它是整个技术的设计目的,而不是用于频繁的增量更新的部署.提供96个文件更新不是修补程序.
补丁是一种工作升级:请记住,补丁只是一种更紧凑的传输机制,适用于已经可以运行的升级.它可以是主要的,次要的甚至是小的更新,每个更新都会有所不同.在您完成任何其他操作之前,请确保在尝试将其打包为补丁之前测试实际的完整升级MSI.这是我能给你的最佳建议.如果完全升级无法正常运行,则会浪费所有用于修补的工作.是的,这包括在制作补丁之前在所有交互中安装,卸载和升级.这可能是所有人中最常见的修补错误.
存在阻止卸载补丁的几个障碍.有许多技术问题可能会导致无法安装的补丁(推荐阅读).这有时是个大问题,因为部署了修补程序的补丁可能会发现有缺陷,因此应该完全撤回.在我看来,这是一个小补丁的核心用途之一 - 部署快速修复,然后可以回滚.
修补和自定义操作条件:对我来说,修补的最糟糕方面之一是,在执行修补程序操作而不是正常安装时,程序包中的自定义操作可能无法正常调整到不运行.修补程序具有特定于修补程序的属性,如PATCH和MSIPATCHREMOVE.在自定义操作上使用这些条件,以使它们在修补程序期间运行或不运行,具体取决于所需的操作.小心自定义操作的条件,它们很难做到正确.这是一个" MSI条件备忘单 ",以帮助您.我没有测试过这些条件 - 测试是唯一的保证.
一些进一步的补丁建议:
显而易见的结论是,即使被要求,我也不建议您采用这种修补方法.但是,我读了这个线程,似乎表明已成功修补已转换为使用WIX而不是Installshield的人.您也应该查看CodeProject链接.
至于您的部署方案 - 我没有完全掌握它的所有方面,但听起来开发人员想要补丁通过补丁将实时应用程序转换为当前的QA版本?我永远不会同意这一点,或者情景必须与听起来不同.当您必须首先进行次要或主要升级时,完全浪费了创建补丁的努力 - 它们足以为QA提供软件.您可以使用dev-branch来提供单独的MSI,然后立即创建一些补丁,然后测试该产品是否可以修改,但我绝不会在内部使用补丁来提供产品的安装程序.我不知道你是否被要求这样做.
使用次要和主要升级 - 最好是后者用于非补丁,并在您真正需要时提供补丁.如果安装持续时间是个问题,那么您可以在所有开发人员和QA PC上完成每晚构建之后安排每日重大升级吗?(包括杀死使安装工作所需的任何正在运行的进程).我不知道我的情景真的是完全偏离正轨.
查看Stefan Kruger的installsite.org以获取更多升级和修补提示.
查看这个众所周知的wix教程,了解升级和补丁.和MSDN.
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |