我在 WiX 中有一个大程序,它使用了一堆 MSI、C# 自定义操作程序、UI、引导程序,你说它,它就在那里。
我遇到了这个问题:当我进行重大升级时,以前的版本没有被删除。也就是说,如果我从版本 1.0.0.x 升级到 1.1.0.x,程序和功能显示这两个版本都安装在机器上。
这是一个常见问题,在 SO 上有很多解决方案。他们都没有为我工作——如果有关于这个的帖子,我已经试过了。
有人告诉我,重大升级中的组件之间存在一对一的关系。也就是说,对于每个移除的组件,都必须添加另一个组件。当它不是一对一的关系时,旧版本没有被删除——因为仍然有旧组件挂起。
有没有办法确定哪些组件挂了?比如,在日志文件中还是什么?如果我能确定 MSI 有什么问题,我可以更积极主动地解决问题。
编辑:
虽然我还没有解决问题,但感谢厄尔曼先生的建议,我可能走上了正轨。
我创建了那个注册表项,但是......它似乎没有做任何事情。但是,我确实在我的卸载日志中搜索了“Disallow”这个词,我发现了这个短语 9 次:
Disallowing uninstallation of component: {GUID-HERE} since another client exists.
此外,此短语出现在“Disallow”短语的每个分组之前:
PROPERTY CHANGE: Adding INSTALLLEVEL property. It's value is '1'.
这给了我一些东西可以继续。但是,我似乎找不到提到的 GUID!它们不在我的解决方案中,也不能在注册表中搜索。除了搜索注册表之外,有没有办法(Windows 7 32 位)找出特定 GUID 对应的组件?