我的一个CA尝试使用 MsiGetFeatureState 检测选择了哪个功能,并使用其状态修改HKLM,但alayws返回 INSTALLSTATE_BROKEN 。我把这个CA放在“ InstallFinalize ”之前。
所以我想知道这是否是预期的以及我如何做到这一点。提前谢谢。
答案 0 :(得分:1)
请参阅:Obtaining Context Information for Deferred Execution Custom Actions
延迟的cusom acton(提交是)不能调用MsiGetFeatureState。只有一个不起眼的自定义动作才能。如果延迟中需要信息,则必须使用CustomActionData对其进行封送处理。有关详细信息,请阅读Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer。
另请注意,禁用回滚时,不会执行提交自定义操作。
我不确定你的意思是“使用它的状态修改HKLM”,但一般来说你应该使用注册表来声明注册表更新。不要重新发现轮子,因为它通常不那么健壮。
答案 1 :(得分:0)
您应该避免修改注册表中的功能。我不确定在安装相同产品时是否允许通过api查询功能状态。你可能会得到一个错误的答案。但你可以做的是设置一些属性并在自定义操作中使用它们。看一下msdn"条件语句语法"。有一些符号允许您查询功能 - 操作和功能状态(或组件)。