基于“较新版本然后更新日期”规则覆盖文件

时间:2013-08-06 04:46:47

标签: installer windows-installer advanced-installer

在InstallShield中,它允许我们使用“更新版本然后更新日期”规则覆盖文件。 任何人都可以告诉我可以在Advanced Installer中实现这样的功能吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

我的新答案,特别是“平等版”问题。

可能的两种方法:

第一种方法:测试!将安装结果与源进行比较,至少在发布设置之前。总是一个很好的推荐。然后击败那些忘记增加版本号的开发人员并说“MSI要求你处理一个干净的版本。如果没有,你的文件不会被现有的旧版本覆盖。”做到了这一点。已经工作了。 (在第一个版本中没有必要,但在更新中。)

第二种方法:始终使用属性REINSTALLMODE和“e”。这意味着始终使用文件版本覆盖现有文件(仅限文件级规则)。例如。你输入你的MSI硬编码属性“ REINSTALLMODE ”,其值为“ emus ”。这仍然允许你覆盖它,例如修理,它应该是“vemus”。更干净的是仅在命令行中设置此属性,但是您需要setup.exe或其他引导程序。

第二种方法更舒适,但现在你已经失去了一个非常干净的文件版本处理。 如果您的公司有两个不同的设置(产品)共享文件,版本1.0(实际上比较旧),它将覆盖“更新”的版本,它也是V1.0。

如果您没有共享文件,则可以。但是您现在真的依赖于安装更新过程的版本管理,因此更重要的是,确保产品1.1(而不是文件)不能安装在较新的产品版本1.2或2.0上。

第三种方法(稍后补充):

如果您只在MSI中生成主要升级,例如没有补丁,你依赖于“在安装新版本之前卸载旧版本”策略(例如InstallShield中的默认版本),然后“正常”你将永远不会出现过度安装文件的情况,给定一些条件(比如没有共享文件)。如果这样做,请不要使用MS的合并模块,除非您是专家。

没有更好的选择。

答案 1 :(得分:1)

此选项在Advanced Installer中不可用,但您可以选择始终覆盖计算机上存在的文件,请参阅Operations tab

答案 2 :(得分:1)

我从这里可能最好的答案开始:不关心。 MSI遵循这里非常充分的默认规则,如果它们不适合您的情况,您可能需要更改策略;你的要求不是最佳实践,危险,有矛盾等等......

更详细地说:

1)如果文件有版本,则不必关心设置。关心开发(构建/ CM)过程。最好是确保每次编译文件时都将文件版本设置得更高。很奇怪(太少)公司实现了这个简单的目标......

2)Windows安装程序文件中包含的文件的最后更改日期在MSI中并不重要,这是非常好的决定!日期通常是非常糟糕的歧视者。最有趣的例子是当你的V1.0的修补程序比V2.0更新时 - 是的,有时需要支持旧的版本行。 :-) 所以,忘记约会。拇指规则是:通常会覆盖未版本控制的文件(除了少数几个例外情况,您首先不需要知道)。

3)你必须告诉我们更详细的,你的问题(如果有的话),或者除了默认行为之外你想要什么?例如。在设置后用“相同版本”或用户编辑的文件覆盖是否有问题?

-

4)完整的详细信息,只有感兴趣:在MSI中,文件覆盖规则对所有文件都是全局的,这对于“旧的”设置/脚本开发人员来说有点可怕,但是它有效,你必须改变你的居住地位。

高级安装程序只是MSI(Windows Installer)的GUI包装器,因此首先您必须了解MSI。

以下是MSDN上MSI文件覆盖的全部故事,称为“文件版本控制规则” http://msdn.microsoft.com/en-us/library/windows/desktop/aa368599(v=vs.85).aspx

与往常一样,MS在MSI文档中做了非常准确的工作。这是MSI最好的事情之一..(内幕笑话)。

如果您阅读该链接的所有子部分,我认为对大多数人来说似乎相当复杂。一旦理解,它就像往常一样简单。