0

我的一个 CA 尝试使用MsiGetFeatureState检测选择了哪个功能并使用其状态修改 HKLM,但它 alayws 返回INSTALLSTATE_BROKEN。我把这个 CA 放在“ InstallFinalize ”之前。

所以我想知道这是否是预期的以及我该如何做到这一点。先感谢您。

4

2 回答 2

1

请参阅:获取延迟执行自定义操作的上下文信息

延迟的自定义操作(提交是)不能调用 MsiGetFeatureState。只有即时的自定义操作可以。如果延迟中需要该信息,则必须使用 CustomActionData 对其进行封送。有关详细信息,请阅读Windows Installer 中自定义操作的安装阶段和脚本内执行选项

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

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

于 2013-10-25T14:25:33.687 回答
0

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

于 2013-10-25T14:01:48.163 回答