根据"Newer version then newer date"规则覆盖文件



在InstallShield中,它允许我们用"更新版本然后更新日期"规则覆盖文件。有人能告诉我在Advanced Installer中可以实现这样的功能吗?非常感谢。

我的新答案,尤其是"相等版本"问题。

两种可能的方法:

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

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

第二种方法更舒适,但现在您失去了一个非常干净的文件版本处理。如果您在公司的两个不同设置(产品)中有一个共享文件,版本为1.0,它确实更旧,它将覆盖同样为V1.0的"新"版本。

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

第三种方法(稍后添加):

如果您只在MSI中生成主要升级,例如没有修补程序并且您依赖"先卸载旧版本,再安装新版本"策略(例如InstallShield中的默认策略),那么在某些条件下(例如没有共享文件),"正常情况下"您永远不会出现过度安装文件的情况。如果这样做,请不要使用MS的合并模块,除非您是专家。

没有比这更好的选择了。

此选项在Advanced Installer中不可用,但您可以选择始终覆盖机器上存在的文件,请参阅"操作"选项卡。

我从这里开始可能的最佳答案:不在乎。MSI遵循这里非常充分的默认规则,如果它们不适合你的情况,你很可能不得不改变你的策略;你的要求不是最佳实践、危险、有矛盾等…

要了解更多详细信息:

1) 如果文件有一个版本,就不要在意设置。关心开发(构建/CM)过程。最好的办法是确保每次编译文件时都会将文件版本设置得更高。奇怪的是,很少有公司能实现这个简单的目标。。。

2) Windows安装程序文件中包含的文件的最后更改日期在MSI中并不重要,这是一个非常好的决定!约会通常是非常糟糕的鉴别器。最有趣的例子是,当V1.0的修补程序比V2.0更新时-是的,有时需要支持旧的版本行。:-)所以,忘记约会吧。经验法则是:未版本的文件通常会被覆盖(只有少数例外情况,你不需要首先知道)。

3) 你必须更详细地告诉我们,你的问题是什么(如果有的话),或者除了默认行为之外,你想得到什么??!例如,您在使用"相同版本"或用户在设置后编辑的文件进行覆盖时遇到问题吗?

--

4) 完整的详细信息,只有在感兴趣的情况下:在MSI中,文件覆盖规则对所有文件都是全局的,这对"老"安装/脚本开发人员来说有点可怕,但它有效,你必须稍微改变一下你的习惯。

高级安装程序只是MSI(Windows安装程序)的GUI包装,所以首先你必须稍微了解MSI。

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

和往常一样,MS在MSI文档中做得非常准确。这是MSI中最好的事情之一。。(内部笑话)。

如果你阅读了该链接的所有小节,我认为对大多数人来说,这似乎相当复杂。一旦被理解,它就会一如既往地简单。

最新更新