0

谁能告诉我为什么这不起作用?我有两个注册表检查来检查是否安装了 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'.

那么可能是什么问题呢?我在另一个自定义操作上完成了此操作,并且效果很好,所以我真的不知道解决方案。

4

1 回答 1

0

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

NOT(Installed or REGDBKEYEXIST or REGDBKEYEXISTX64)
于 2012-08-30T11:46:42.837 回答