【问题标题】:MSI: Fixing different component GUIDs for the same fileMSI:为同一文件修复不同的组件 GUID
【发布时间】: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


【解决方案1】:

要切换到后期主要升级,您必须确保仅从符合组件规则的版本进行升级。所以在这种情况下,您必须阻止从 v1.0 升级。

【讨论】:

  • 害怕那个。
猜你喜欢
  • 2021-02-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多