2

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

4

3 回答 3

2

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

两种可能的方法:

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

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

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

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

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

如果您只在 MSI 中产生Major Upgrades ,例如没有补丁,并且您依赖“卸载旧版本,然后安装新版本”策略(例如 InstallShield 中的默认设置),那么“通常”您将永远不会出现过度安装文件的情况,给定一些条件(比如再次没有共享文件)。如果这样做,请不要使用MS 的合并模块,除非您是专家。

没有更好的选择。

于 2013-08-07T16:34:30.747 回答
1

此选项在高级安装程序中不可用,但您可以选择始终覆盖机器上存在的文件,请参阅操作选项卡

于 2013-08-06T17:26:19.407 回答
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 中最好的事情之一。(内幕笑话)。

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

于 2013-08-06T21:50:28.003 回答