我有一个自定义操作,如果特殊功能的操作状态为“install”,则必须执行该操作。现在我正在使用下一个条件:
(&ca_feature=3 AND NOT &ca_feature=2) OR (!ca_feature=3 AND PATCH) .
我想在修改模式下执行它。当该功能已安装且用户不想删除它时。我可以将OR (REINSTALL><ca_feature OR REINSTALL=ALL)
附加到我的条件字符串中。但它似乎无法正常工作..我无法了解MSI在某些情况下是如何工作的,这是我的问题。但我也无法在互联网上找到答案。
请告诉我我在做什么/理解错误?提前感谢
答案 0 :(得分:2)
条件正确。如果要重新安装您的功能,则REINSTALL
的最后一部分将成立。
虽然您可以尝试使用!ca_feature=3
而不是REINSTALL><ca_feature
:在安装该功能时会运行CA.
我认为你的情况可能是这样的:
(&ca_feature=3) OR (!ca_feature=3 AND NOT (REMOVE><ca_feature OR REMOVE=ALL))
当此功能计划安装时,或者如果已安装并且未安排删除,则会运行CA.
第一个括号中的此部分AND NOT &ca_feature=2
是多余的,因为&ca_feature
如果已经等于3,则不能等于2.
使用MSI verbose logging更好地了解正在发生的事情。以这种方式运行您的安装:
msiexec /i package.msi /l*vx log.txt
当功能状态更改或属性被修改时,您将在日志中看到一条消息。然后,您将能够将实际值与您的期望进行比较。使用其他操作开关而不是/i
以修改或删除模式运行它。