Wix MSI MSI GetFeatureState在被自定义操作调用为提交执行时返回INSTALLSTATE_Breaked

Wix MSI MSI GetFeatureState在被自定义操作调用为提交执行时返回INSTALLSTATE_Breaked,wix,windows-installer,Wix,Windows Installer,我的一个CA尝试使用MsiGetFeatureState检测选择的功能,并使用其状态修改HKLM,但它总是返回INSTALLSTATE\u-breaked。我将此CA放在“InstallFinalize”之前 因此,我想知道这是否是预期的,我如何才能做到这一点。提前谢谢。您应该避免修改注册表中的功能。我不确定是否允许在安装同一产品时通过api查询功能状态。你可能会得到一个旧的/错误的答案。但您可以做的是设置一些属性并在自定义操作中使用它们。看看msdn“条件语句语法”。有一些符号可用于查询要素动

我的一个CA尝试使用MsiGetFeatureState检测选择的功能,并使用其状态修改HKLM,但它总是返回INSTALLSTATE\u-breaked。我将此CA放在“InstallFinalize”之前


因此,我想知道这是否是预期的,我如何才能做到这一点。提前谢谢。

您应该避免修改注册表中的功能。我不确定是否允许在安装同一产品时通过api查询功能状态。你可能会得到一个旧的/错误的答案。但您可以做的是设置一些属性并在自定义操作中使用它们。看看msdn“条件语句语法”。有一些符号可用于查询要素动作和要素状态(或组件)

请参见:

延迟的cusom acton(提交为)无法调用MsiGetFeatureState。只有即时自定义操作才能执行。如果延迟数据中需要该信息,则必须使用CustomActionData封送。有关更多信息,请阅读

另外,请注意,禁用回滚时不会执行提交自定义操作


我不太清楚“使用状态修改HKLM”是什么意思,但一般来说,您应该使用注册表表来声明注册表更新。不要重新安装车轮,因为它通常不太坚固。

忘了提及。如果我将其更改为“立即”执行,MsiGetFeatureState将返回正确的值,但在这种情况下,当UAC打开时,我无法在HKLM中添加注册表项。我还想在InstallShield中发布一个有助于我的具体情况的答案。这可能并不完全适用于wix,但提出的问题直接适用于我的问题。我的InstallScript在试图获取状态的功能名称中有一个输入错误。所以我得到了
INSTALLSTATE\u breaked
(数值为0,仅供参考)。这是一个愚蠢的问题,但仍然困扰着我。