2011-07-26 28 views
1

如果特殊功能的操作状态为“安装”,则必须执行自定义操作。现在我正在使用下一个条件:重新安装期间的CA条件

(&ca_feature=3 AND NOT &ca_feature=2) OR (!ca_feature=3 AND PATCH) . 

我想在修改模式下执行它。当功能已安装并且用户不想删除它时。我想追加OR (REINSTALL><ca_feature OR REINSTALL=ALL)到我的条件字符串。但它似乎无法正常工作..我无法了解MSI在某些情况下如何工作,这是我的问题。但我也无法在互联网上找到答案。 请告诉我什么我做/理解错误?thanx提前

回答

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不能等于2,如果它已经等于3


使用MSI verbose logging更好地了解发生了什么事情。以这种方式运行您的安装:

msiexec /i package.msi /l*vx log.txt 

当功能状态发生变化或属性被修改时,您会在日志中看到一条消息。然后,您就可以将实际值与您的预期进行比较。使用其他操作开关代替/i以修改或删除模式运行它。

+0

谢谢你,阿列克谢。我会在以后尝试你的情况,当我启用change_mode在我installer.I只是想知道:如果功能状态是安装,并且我不改变它的状态在change_mode(如果我只是添加一个新的功能)什么将等于REINSTALL属性。我猜它会像重新安装=“NEWONEFEATURE”。如果是这样,它真的更好用!FEATURE = 3,正如你所说的。谢谢了很多,我明白了现在:)和来自莫斯科的你好) – Nerielle