MsiSetFeatureStateA 函数 (msiquery.h)

MsiSetFeatureState 函数将功能设置为指定状态。

语法

UINT MsiSetFeatureStateA(
  [in] MSIHANDLE    hInstall,
  [in] LPCSTR       szFeature,
  [in] INSTALLSTATE iState
);

参数

[in] hInstall

对提供给 DLL 自定义操作的安装句柄,或通过 MsiOpenPackageMsiOpenPackageExMsiOpenProduct获取的安装句柄。

[in] szFeature

指定功能的名称。

[in] iState

指定要设置的状态。 此参数可以是下列值之一。

价值 意义
INSTALLSTATE_ABSENT
未安装该功能。
INSTALLSTATE_LOCAL
该功能安装在本地驱动器上。
INSTALLSTATE_SOURCE
该功能从源、CD 或网络运行。
INSTALLSTATE_ADVERTISED
此功能已播发。

返回值

MsiSetFeatureState 函数返回以下值:

言论

MsiSetFeatureState 函数请求更改 功能 表中功能的选择状态及其子项。 反过来,还会根据新功能选择状态相应地更新链接到已更改功能记录的所有组件的操作状态。

在调用 msiSetFeatureState之前,必须先 调用 MsiSetInstallLevel 函数。

调用 msiSetFeatureState 时,安装程序会尝试将每个组件的操作状态设置为与指定状态绑定的指定功能。 但是,当无法完全实现请求时,有一些常见情况。 例如,如果某个功能通过 FeatureComponents 表绑定到两个组件(组件 A 和组件 B),并且组件 A 具有 msidbComponentAttributesLocalOnly 属性,组件 B 具有 msidbComponentAttributesSourceOnly 属性。 在这种情况下,如果 MsiSetFeatureState 以请求的状态INSTALLSTATE_LOCAL或INSTALLSTATE_SOURCE调用,则无法为这两个组件完全实现请求。 在这种情况下,这两个组件都处于打开状态,组件 A 设置为“本地”,组件 B 设置为“源”。

如果多个功能链接到单个组件(常见方案),该组件的最终操作状态将按如下所示确定:

  • 如果至少有一项功能要求在本地安装组件,则该功能安装状态为本地。
  • 如果至少一项功能要求从源运行组件,则该功能会安装有源状态。
  • 如果至少有一项功能需要删除组件,则不存在操作状态。
请参阅 从程序调用数据库函数。

如果函数失败,可以使用 MsiGetLastErrorRecord获取扩展错误信息。

注意

msiquery.h 标头将 MsiSetFeatureState 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer
目标平台 窗户
标头 msiquery.h
Msi.lib
DLL Msi.dll

另请参阅

安装程序选择函数