在条件问题上运行自定义操作

时间:2012-08-30 11:40:59

标签: wix conditional-statements custom-action

有人能告诉我为什么这不起作用吗? 我有两个注册表检查来检查是否安装了Visual C ++ Redistributables:

<Property Id="REGDBKEYEXISTX64">
  <RegistrySearch Id="REGDBKEYEXISTX64" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" Name="Version" Type="raw" Win64="yes" />
</Property>

<!--Checking if Microsoft Visual C++ Redistributables are installed on a 32-bit system-->
<Property Id="REGDBKEYEXIST">
  <RegistrySearch Id="REGDBKEYEXIST" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" Name="Version" Type="raw" Win64="no" />
</Property>

如果没有安装,我会运行自定义操作:

<Custom Action="InstallRedistributables" After="GetVariantName">Installed OR REGDBKEYEXISTX64 OR REGDBKEYEXIST</Custom>

但是,当安装可再发行组件时,它仍会运行自定义操作,这是我不想要的。我知道它会检测到它,因为这是我的日志文件:

Property: REGDBKEYEXIST, Signature: REGDBKEYEXIST

 MSI (c) (4C:44) [12:19:04:989]: PROPERTY CHANGE: Adding REGDBKEYEXIST property. Its value is '#134276921'.

那么可能是什么问题?我已经完成了另一个自定义操作,它完美无缺,所以我真的不知道解决方案。

1 个答案:

答案 0 :(得分:0)

看来你的情况正好相反。如果注册表项存在,则将设置REGDBKEYEXIST属性,因此当搜索指示可再发行组件存在时,将设置为NOT REGDBKEYEXIST。所以你可能想要的更像Installed你也可能只想在第一次安装时运行它(因此你引用NOT(Installed or REGDBKEYEXIST or REGDBKEYEXISTX64) )。因此,我建议将您的情况更改为以下内容:

{{1}}