msiSetFeatureStateW 函数 (msiquery.h)

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

语法

UINT MsiSetFeatureStateW(
  [in] MSIHANDLE    hInstall,
  [in] LPCWSTR      szFeature,
  [in] INSTALLSTATE iState
);

参数

[in] hInstall

提供给 DLL 自定义操作或通过 MsiOpenPackage、MsiOpenPackageExMsiOpenProduct 获取的安装的句柄。

[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 设置为“源”。

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

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

如果函数失败,可以使用 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
目标平台 Windows
标头 msiquery.h
Library Msi.lib
DLL Msi.dll

另请参阅

安装程序选择函数