Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows installer Windows Installer";错误1308。“未找到源文件”;按顺序方案卸载修补程序时_Windows Installer_Installshield_Patch_Msi Patch - Fatal编程技术网

Windows installer Windows Installer";错误1308。“未找到源文件”;按顺序方案卸载修补程序时

Windows installer Windows Installer";错误1308。“未找到源文件”;按顺序方案卸载修补程序时,windows-installer,installshield,patch,msi-patch,Windows Installer,Installshield,Patch,Msi Patch,我需要使用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: {p

我需要使用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.
其中有26个错误与不同的文件有关。文件或组件没有明显的模式,也没有明显的功能

注意:如果我只应用了修补程序3,卸载不会产生此错误

我用补丁设计中相同的选项创建了所有三个补丁。我所理解的唯一明显的区别是,补丁3比前两个包含更多的更改(文件更新)。让我重复一遍:还有很多变化

我的问题是:

  • 为什么只有在安装了一系列补丁的情况下才会发生这种情况,而不仅仅是第三个补丁本身

  • 为了防止修补程序卸载尝试从一个位置获取文件,而该位置在构建修补程序时应仅用于设计时,我必须做些什么?或者这可能是设计的抓取,但是缓存太过载或太混乱了

  • 更新-更多信息(Glytzhkof要求): 该补丁包含96个文件更改,大约是基本MSI包大小的一半。它实际上是脱离了“开发”分支的工作。添加了几个新文件。有些最初被移除了(当我发现我们真的在做补丁时,不得不把它们放回去…)。如果我再描述一下这种情况,可能会冒犯你这个领域的专业人士

    我一直在尝试销售主要的升级,它只需要对安装程序进行一些调整,使其不再需要补丁。卸载我们的产品需要参数才能使其非交互式(我们需要此参数才能在主要升级场景中工作,它目前只是卸载序列的一部分)。这是唯一真正的问题,但解决它将付出惨重的代价。但是,决定不解决该问题。我试图在每次迭代中“碰撞”这个问题。没有骰子。有人告诉我,我们需要为主要发行版提供补丁,所以在这里,我正试图让尾巴摇狗

    是的,补丁可以更快(让我在这里扮演魔鬼代言人)。但实际上,30秒和90秒之间的差异,当这些东西被自动部署的时候?是的,我也考虑过如何通过调整文件成本来优化安装程序,看看它是否能使安装速度更快,但即使如此,我相信会有另一个原因要求安装补丁

    另一个更新:1308错误中提到的文件不在目标系统的
    %windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI???}


    文件夹。这可能会导致1308错误,因为如果我从这个缓存中删除更多的文件,就会得到与丢失的文件对应的相同错误。问题可能是,为什么所有的文件都不在这个文件夹中?

    我将不得不添加这个作为答案,因为它太长了,无法发表评论。200个文件更改?我想文件成本将比安装一个完整的小升级需要更长的时间。如果我是你,我会拒绝提供这种补丁。由于技术的复杂性,它们注定要失败,几乎百分之百确定无疑。请记住,MSI补丁只是一个已经运行的升级的交付机制,基本上只是增加了风险和复杂性。事实确实如此

    MSI补丁非常复杂,需要注册以供检查和卸载-它们不只是像MSI之前的世界那样转储和修补文件。如果用户需要修补,我会选择与MSI完全不同的解决方案


    你能更详细地描述一下这个场景吗?我发现提供主要升级的自动化构建过程非常适合向QA交付每日构建。如果安装速度是一个问题,您可以使用一些技术来加快速度,例如启用。使用此属性,您可以告诉系统执行较轻且耗时的操作,例如创建系统还原点,并进行彻底的文件成本计算(比较已安装和正在安装的文件以及目录大小)


    我仍然在寻找解决方案,或者至少是一些指导,甚至 尽管我同意这超出了正常的良好实践杰克 一小时前

    我无法访问我的部署工具,但我将尝试提供一个透视图。因为我没有完全掌握你写的东西的所有方面,所以它将是一般性的评论。我希望这至少与你的要求有关。我写的时候,它变成了一个博客

    对我来说,MSI补丁2种基本场景有效

  • 您可以修复已安装产品的卸载顺序中的错误,该错误带有一个小的升级补丁
  • 您为几个文件提供了一个小的升级补丁,作为发布产品的“修补程序”,重新安装该产品可能会耗费大量时间
  • 出于这两个目的,我已经在专业领域多次有效地使用MSI补丁。在所有情况下,都没有其他好办法补丁IMHO用于“热修复”-这是整个技术的设计目的,而不是用于部署频繁的增量更新。提供96个文件更新是而不是热修复

    补丁是一种有效的升级:请记住,对于已经有效的升级,补丁只是一种更紧凑的交付机制。它可以是一个主要的,次要的,甚至是小的更新,每一个都会有不同的工作方式。在您执行任何其他操作之前,请确保在尝试将MSI打包为修补程序之前测试了实际的完全升级MSI。这是我能给你的最好的建议。如果完整升级无法正常工作,那么在修补上花费的所有精力都将白费。是的,这包括inst