【发布时间】:2018-08-27 21:53:39
【问题描述】:
我有一个 .msi 安装程序,可以放置多个文件。版本更新后,文件获得了新的 GUID,现在当从版本 1 更新到 2 时,安装程序会删除其中一些文件而不是更新它们。
查看它为具有新 ID 的文件调用注册组件的日志,但有一条消息我怀疑可能是原因:
File: <PATH_TO_FILE>; Overwrite; Won't patch; Existing file is unversioned and unmodified - hash doesn't match source file
如何确保将具有新 GUID 的文件复制到旧版本之上(使其版本化)?
更新:
我尝试将ReinstallMode 设置为“amus”,而不是“omus”,但似乎因为以前的 .msi 是“omus”,文件仍然消失,除非我连续运行两次新安装程序,这不是最优的。
基本上我需要一个版本 3 安装程序,它可以升级版本 1 或 2 并且不删除有问题的文件(如果可能的话)
【问题讨论】:
-
你用的是什么工具?维克斯?本质上,您需要在版本之间保持组件 GUID 稳定。您可以使用 WiX 的自动 GUID 来执行此操作(自动生成的 GUID)。您还必须断开与过去罪恶的链接,因此我建议设置一个新的主安装路径。这将起作用,但您必须确定它是否适合您的产品。它有多大?您是否有必须在新版本中保留的设置文件?
-
@Stein Åsmul 很遗憾无法更改安装位置和 GUID。改回 GUID 只会在版本 2 和 3 之间产生同样的问题
-
我能问一下
RemoveExistingProducts在您最终编译的MSI 中的InstallExecuteSequence中的什么位置吗?在 Orca 中打开,查看InstallExecuteSequence表,按Sequence column排序。RemoveExistingProducts之前的动作是什么? (以及序号是多少)。 -
@Stein Åsmul 在
RemoveExistingProducts(6601) 之前是InstallFinalize(6600)