MSI检测修复模式

时间:2014-02-12 10:27:42

标签: windows-installer

我在msi状态下检测到修复时遇到问题。
在installshield中,备忘单写成:

REINSTALL~="ALL" AND NOT REINSTALLMODE><"v"

这意味着REINSTALL不区分大小写等于“ALL”,而REINSTALLMODE不包含“v”字母。
在我的MSI中,此值设置为REINSTALL =“ALL”和REINSTALLMODE =“ocmusv”。为什么v字母在那里?作弊表是错的吗?检测重新安装的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

对于某些维修来说,备忘单可能是错误的,那些是由系统启动的,因为REINSTALL不会是“全部” - 它将是一个功能名称。其他条件的问题是属性名称区分大小写,并且安装条件没有拼写为“已安装”,事实上是“已安装”。 UPGRADINGPRODUCTCODE不相关,因为它是在产品通过传入的主要升级升级时设置的,这与修复无关。此外,我认为并非所有修理都设置为“v”,因为我认为我已经看到了“omus”的修复命令行。

尝试检测修复通常是徒劳的,我的建议是忘记尝试区分修复。所有发生的事情是组件再次安装,可能会被破坏。将设置Installed属性,因此您知道它不是全新安装,并且将设置REINSTALL,因为正在安装一个或多个功能。在不知道你想要用这种情况完成什么的情况下,我不知道还能说些什么。有时说出你想要解决的问题更有用。

答案 1 :(得分:0)

我想你可以查看这个小图表(第一个答案): How to add a WiX custom action that happens only on uninstall (via MSI)?

我没有测试过信息的准确性,但看起来还不错。 更新:我只是直接指出了“线程”中看起来更好的答案。