2012-02-28 54 views
8

我有一个相当大的WiX安装程序(250 Mb以上),我正在尝试提出一个合适的升级策略。我应该如何处理WiX安装程序中的产品升级?

大多数在安装程序的文件不会改变,我们不希望有分发整个包时,只有一个或两个文件已更改。

我查看了主要和次要升级,我的理解是,如果产品ID更改,只要升级ID保持不变,并且可以使用较小的升级修补程序(如果这两个值都保持不变一样。

我的感觉是,使用一个补丁次升级将处理情况只有少数文件发生变化,只有重建整个安装程序文件时相当数量的改变情况下的最佳选择。

我一直在使用“火炬”,以产生基于两个“wixpdb”文件之间的差异“wixmst”文件,然后建立从一个补丁测试这一点。但是,我发现我只能从一个版本修补到另一个版本(例如1.0.0到1.0.1,然后是1.0.1到1.0.2,但不是1.0.0到1.0.2)。是否有可能针对某个补丁的最低版本并支持其上的任何版本?

回答

8

修补是一个痛苦,所以在学习掌握它时准备好了很多。这是另一种可能适合你的策略。将你的MSI分成2个MSI(微软称之为Micropackage)。有一个基本MSI包含预计不会更改的大部分内容,以及第二个包含您的文件的MSI要小得多,因此您希望该文件的流失率很高。

然后用刻录是处理一起链接这些和卸载在一起引导程序。这与Visual Studio的功能类似。

现在你可以发布你的第二个MSI的主要升级。

+0

我正在考虑创建单独的MSI,所以这可能会前进。谢谢你的建议。 – 2012-02-28 15:25:49

2

我相信这是可能的,你上面描述的场景来修补,只要补丁卸载的。一个例子的情况是:

  1. 安装MSI(V1.0)
  2. 安装MSP(V1.0 - V1.1)
  3. 卸载MSP(回V1.0),然后安装MSP(V1 0.0 - 1.2)

有关卸载的修补程序的详细信息,请参阅WiX的文档:http://wix.sourceforge.net/manual-wix3/patch_restrictions.htm 和Windows文件:http://msdn.microsoft.com/en-us/library/aa372102.aspx

注意,创建卸载的补丁也有一定的限制,你必须在维克斯3.0或更高版本。

就像克里斯托弗提到的那样,修补可能是一种痛苦。我发现,在许多情况下,我的经理可能会要求能够进行补丁升级,因为他们的真正意思是让用户无需先进行手动安装即可进行升级,这可以通过重大升级来完成。

也就是说,如果你有需要得到经常被下载,然后打补丁可能是值得额外的努力,许多小的更新客户。

+0

我刚才想到的其他东西是你必须考虑你的构建过程。管理人员可能会要求补丁,因为他们认为如果只有少数文件发生变化,他们不必做太多的回归测试。但是,如果您在每个版本中对您的dll进行版本化,并尝试在两个版本之间创建补丁,那么在安装补丁后,即使补丁大小可能很小,您也会在每个dll上看到版本更改。当管理人员和测试人员看到这一点时,他们可能会感到惊讶。 – BryanJ 2012-02-29 02:25:55

+0

感谢您的回复。我们现在已经有了一些补丁可以使用。从长远来看,我认为我倾向于克里斯托弗关于创造两个MSI的建议。 – 2012-03-01 14:49:54

0

虽然Christophers答案是真棒在他建议的WiX的引导程序,我不鼓励做了“高流失”一揽子重大更新的途径。问题是,在完成引导修补程序后,内部将HighChurn.msi中的易失性库从v1.0版本升级到v1.1,但据我所知,引导程序不会重新安装先前的版本包中的HighChurn.msi v1.0。

还有另外一条路径:你当然可以创建针对主包发布的补丁。鉴于你写的内容我不完全确定,但是如果你的1.2补丁只能应用到1.1,那么你可能只会将你的1.2与1.1分开,而不是1.0。

这里是一个整洁的指导如何创建补丁:https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/patchwork/

按照该指南,做替代的修补软件([PatchFamily/@取代],它会让V1.2其无效运V1.1一切,所以你基本上被迫制作v1.2补丁v1.0而不是v1.1),并且将该标志添加到补丁元素中以定位主版本,即使存在更高版本:Patch/@MinorUpdateTargetRTM="yes"。请始终将补丁与版本安装程序(HighChurn.msi v1.0)区分开,而不要针对您用于补丁(HighChurn.msi v1.1)的安装程序。

还有的,你可能要需要一定的升级安装补丁过程中的情况:一个精心策划的补丁包/服务包方案,例如,在补丁1.1.1,需要安装在发布1.0的顶级服务包1.1。

关于修补您的易失性数据(我在这里假设版本化的库)的最后一句话:您可能需要关注在修补程序中基本上可以替换哪些库。然后,只需将更改后的库更新,就可以创建数据量极少的修补程序。如果您增加所有库的版本,则所有库都将打补丁,从而产生更大的补丁。这可能需要稍微更复杂的构建工作流程(上帝知道它为我们做了)。

相关问题