使用 Windows Installer 清点产品和修补程序

具有管理权限的用户和应用程序可以使用 Windows Installer 功能来清点安装在系统上的 Windows Installer 应用程序、功能、组件和修补程序。

从 Windows Installer 3.0 开始,具有管理员权限的用户和应用程序可以枚举所有用户在系统上安装的 Windows Installer 应用程序、功能、组件和修补程序。 管理员和应用程序可以获取有关系统中特定用户或所有用户的产品或修补程序的信息。 应用程序可以获取特定用户的功能状态或组件状态。

从 Windows Installer 3.0 开始可用的清单函数可以限制安装上下文和用户上下文要找到的项的范围。 有三种可能的安装上下文:每用户、每计算机和每用户管理。 用户上下文可以是系统中的特定用户或所有用户。

早于 Windows Installer 3.0 的 Windows Installer 清单函数版本只能枚举在计算机上下文中或当前用户的每用户上下文中安装在系统上的项目。 此限制会阻止当前用户以外的用户在系统中安装的所有 Windows Installer 产品和修补程序的完整清单。

枚举产品

使用 MsiEnumProductsEx 函数枚举系统中安装的 Windows Installer 应用程序。 此功能可以为当前用户和系统中的其他用户查找应用程序(托管和非托管)的所有每计算机安装和每用户安装。 使用 dwContext 参数指定要找到的安装上下文。 可以指定可能的安装上下文的任意一种或任意组合。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。

枚举修补程序

使用 MsiEnumPatchesEx 函数查找应用于应用程序的修补程序。 此函数可查找应用于特定应用程序或系统中所有应用程序的修补程序。 此函数可以为当前用户和系统中的其他用户查找应用于应用程序(托管和非托管)的所有每计算机安装和每用户安装的修补程序。

可以使用安装上下文和用户上下文将修补程序枚举限制为特定上下文或跨所有上下文。 使用 dwContext 参数指定要找到的安装上下文。 可以指定可能的安装上下文的任意一种或任意组合。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。

枚举应用于系统中所有用户播发或安装的所有产品的修补程序

  • 调用 MsiEnumPatchesEx 函数。
    • 对 szProductCode 参数的值使用 NULL。
    • 使用“s-1-1-0”作为 szUserSid 参数的值。
    • 使用“MSIINSTALLCONTEXT_ALL”作为 dwContext 参数的值。

枚举应用于系统中所有用户播发或安装的所有产品的修补程序

  1. 调用 MsiEnumProductsEx 函数。

    • 对 szProductCode 参数的值使用 NULL。
    • 使用“s-1-1-0”作为 szUserSid 参数的值。
    • 使用“MSIINSTALLCONTEXT_ALL”作为 dwContext 参数的值。

    此函数为找到的每个应用程序提供产品代码、用户上下文和安装上下文。

  2. 对于步骤 1 中枚举的每个应用程序,调用 MsiEnumPatchesEx 来枚举修补程序。

    将从 MsiEnumProductsEx 获得的产品代码、用户上下文和安装上下文用于 szProductCode、szUserSid 和 dwContext 的值以及每个 MsiEnumProductsEx 函数调用。

获取产品信息

使用 MsiGetProductInfoEx 函数获取有关系统上播发或安装的应用程序以及可检索的属性的信息。 此函数可以获取在当前用户以外的用户帐户下安装的应用程序实例的信息,但无法查询在当前用户以外的用户帐户的按用户非托管上下文下播发的产品实例。

可以指定安装上下文和用户上下文,以限制在特定上下文中安装的应用程序的信息。 使用 dwContext 参数指定要找到的安装上下文。 只能指定其中一个可能的安装上下文。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。

获取修补程序信息

应用程序可以调用 MsiGetPatchInfoEx 函数来查询有关将修补程序应用到产品指定实例的信息。 可以使用此函数检索 LocalPackage、Transforms 和 State 等属性。 如果用户当前未登录到计算机,则不能保证所有属性值都可用于每用户非托管应用程序。 只能指定其中一个可能的安装上下文。

可以指定安装上下文和用户上下文,以将信息限制为应用于特定上下文中安装的应用程序的修补程序。 使用 dwContext 参数指定要找到的安装上下文。 只能指定其中一个可能的安装上下文。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。

获取组件状态信息

应用程序可以调用 MsiQueryComponentState 函数来获取组件的安装状态。 此函数确定组件是在本地安装还是安装后设置为从源运行。 该函数可以查询在当前用户以外的用户帐户下安装的应用程序实例的组件,前提是该产品未在当前用户以外的用户帐户的每用户非托管上下文下公布。

可以指定安装上下文和用户上下文,以获取特定上下文中安装的应用程序的组件状态。 使用 dwContext 参数指定要找到的安装上下文。 只能指定其中一个可能的安装上下文。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。

获取功能状态信息

应用程序可以调用 MsiQueryFeatureStateEx 函数来获取产品功能的安装状态。 此函数确定该功能是已播发、已本地安装还是已安装并设置为从源运行。 此函数可用于查询在计算机帐户下安装的应用程序实例的任何功能,或者当前用户帐户下的任何上下文,或当前用户以外的任何用户帐户下的每用户托管上下文。 此函数无法为当前用户以外的用户帐户查询在每用户非托管上下文下安装的应用程序。 只能指定其中一个可能的安装上下文。

可以指定安装上下文和用户上下文,以获取特定上下文中安装的应用程序的功能状态。 使用 dwContext 参数指定要找到的安装上下文。 只能指定其中一个可能的安装上下文。 使用 szUserSid 参数指定要找到的应用程序的用户上下文。