有人能告诉我为什么这不起作用吗? 我有两个注册表检查来检查是否安装了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'.
那么可能是什么问题?我已经完成了另一个自定义操作,它完美无缺,所以我真的不知道解决方案。
答案 0 :(得分:0)
看来你的情况正好相反。如果注册表项存在,则将设置REGDBKEYEXIST
属性,因此当搜索指示可再发行组件存在时,将设置为NOT REGDBKEYEXIST
。所以你可能想要的更像Installed
你也可能只想在第一次安装时运行它(因此你引用NOT(Installed or REGDBKEYEXIST or REGDBKEYEXISTX64)
)。因此,我建议将您的情况更改为以下内容:
{{1}}