【发布时间】:2017-08-21 02:33:46
【问题描述】:
我继承了一个历史悠久的安装程序。在一些版本中,组件 GUID 没有被正确跟踪,导致给定文件的组件 GUID 不同。
v1.0: C:\Program Files\Foo\Foo.exe {GUID_A}
v2.0: C:\Program Files\Foo\Foo.exe {GUID_B}
v3.0: C:\Program Files\Foo\Foo.exe {GUID_B}
这显然是violates component rules,并且需要对RemoveExistingProducts 进行早期排序以避免升级后文件缺失。
每个新版本都安装为Major Upgrade。预计最新版本将干净地升级任何以前的版本。
问题:有没有办法重置或挽救这种情况?我想在 InstallFinalize 之后安排 RemoveExistingProducts 而不会造成破坏。
(自从我得到这个项目以来,我一直在使用heat.exe's 确定性 GUID。有史以来最好的功能。)
【问题讨论】:
-
为什么在 InstallFinalize 之后调度 REP 会导致破坏?这是一个记录在案的选择,尚不清楚您在关注什么。
-
来自第一个链接:“如果两个组件具有相同名称和位置的资源,并且两个组件都安装到同一个文件夹中,那么删除任何一个组件都会删除公共资源,这会损坏剩余的组件。”
-
RemoveExistingProducts 删除 refcount==0 组件(在我的场景中为 GUID_A)。如果最后排序,新安装的 Foo.exe 会被删除。
-
好吧,我的愚蠢错误,我将 InstallFinalize 读作 InstallInitialize,这是您应该对 REP 进行排序以避免问题的地方。
-
是的,这就是现在正在做的事情。问题是是否有办法让我不必这样做。
标签: wix windows-installer