Share via


Función MsiEnumProductsExW (msi.h)

La función MsiEnumProductsEx enumera a través de una o todas las instancias de productos que se anuncian o instalan actualmente en los contextos especificados. Esta función sustituye a MsiEnumProducts.

Sintaxis

UINT MsiEnumProductsExW(
  [in, optional]      LPCWSTR           szProductCode,
  [in]                LPCWSTR           szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwIndex,
  [out, optional]     WCHAR [39]        szInstalledProductCode,
  [out, optional]     MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional]     LPWSTR            szSid,
  [in, out, optional] LPDWORD           pcchSid
);

Parámetros

[in, optional] szProductCode

Productcode GUID del producto que se va a enumerar. Solo se enumeran las instancias de productos dentro del ámbito del contexto especificado por los parámetros szUserSid y dwContext . Este parámetro se puede establecer en NULL para enumerar todos los productos del contexto especificado.

[in] szUserSid

Cadena terminada en NULL que especifica un identificador de seguridad (SID) que restringe el contexto de enumeración. La cadena de SID especial s-1-1-0 (Todos) especifica la enumeración entre todos los usuarios del sistema. Un valor de SID distinto de s-1-1-0 se considera un SID de usuario y restringe la enumeración al usuario actual o a cualquier usuario del sistema. Este parámetro se puede establecer en NULL para restringir el ámbito de enumeración al usuario actual.

Tipo de SID Significado
NULL
Especifica el usuario que ha iniciado sesión actualmente.
SID de usuario
Especifica la enumeración de un usuario determinado en el sistema. Un ejemplo de SID de usuario es "S-1-3-64-2415071341-1358098788-3127455600-2561".
s-1-1-0
Especifica la enumeración entre todos los usuarios del sistema.
 
Nota La cadena de SID especial s-1-5-18 (System) no se puede usar para enumerar productos o revisiones instalados según la máquina. Cuando dwContext se establece en solo MSIINSTALLCONTEXT_MACHINE, szUserSid debe ser NULL.
 

[in] dwContext

Restringe la enumeración a un contexto. Este parámetro puede ser cualquiera o una combinación de los valores que se muestran en la tabla siguiente.

Context Significado
MSIINSTALLCONTEXT_USERMANAGED
Enumeración extendida a todas las instalaciones administradas por usuario para los usuarios especificados por szUserSid. Un SID no válido no devuelve ningún elemento.
MSIINSTALLCONTEXT_USERUNMANAGED
Enumeración extendida a todas las instalaciones no administradas por usuario para los usuarios especificados por szUserSid. Un SID no válido no devuelve ningún elemento.
MSIINSTALLCONTEXT_MACHINE
Enumeración extendida a todas las instalaciones por máquina. Cuando dwInstallContext se establece en solo MSIINSTALLCONTEXT_MACHINE, el parámetro szUserSID debe ser NULL.

[in] dwIndex

Especifica el índice del producto que se va a recuperar. Este parámetro debe ser cero para la primera llamada a la función MsiEnumProductsEx y, a continuación, incrementarse para las llamadas posteriores. El índice debe incrementarse, solo si la llamada anterior ha devuelto ERROR_SUCCESS. Dado que los productos no están ordenados, ningún producto nuevo tiene un índice arbitrario. Esto significa que la función puede devolver productos en cualquier orden.

[out, optional] szInstalledProductCode

Cadena terminada en NULL de TCHAR que proporciona el GUID productCode de la instancia de producto que se enumera. Este parámetro puede ser NULL.

[out, optional] pdwInstalledContext

Devuelve el contexto de la instancia de producto que se está enumerando. El valor de salida puede ser MSIINSTALLCONTEXT_USERMANAGED, MSIINSTALLCONTEXT_USERUNMANAGED o MSIINSTALLCONTEXT_MACHINE. Este parámetro puede ser NULL.

[out, optional] szSid

Búfer de salida que recibe el SID de cadena de la cuenta en la que existe esta instancia de producto. Este búfer devuelve una cadena vacía para una instancia instalada en un contexto por máquina.

Este búfer debe ser lo suficientemente grande como para contener el SID. Si el búfer es demasiado pequeño, la función devuelve ERROR_MORE_DATA y establece *pcchSid en el número de TCHAR en el SID, no incluido el carácter NULL de terminación.

Si szSid se establece en NULL y pcchSid se establece en un puntero válido, la función devuelve ERROR_SUCCESS y establece *pcchSid en el número de TCHAR en el valor, sin incluir el valor NULL de terminación. A continuación, se puede llamar a la función de nuevo para recuperar el valor, con el búfer szSid lo suficientemente grande como para contener *pcchSid + 1 caracteres.

Si szSid y pcchSid se establecen en NULL, la función devuelve ERROR_SUCCESS si el valor existe, sin recuperar el valor.

[in, out, optional] pcchSid

Al llamar a la función , este parámetro debe ser un puntero a una variable que especifica el número de TCHAR en el búfer szSid . Cuando se devuelve la función, este parámetro se establece en el tamaño del valor solicitado, independientemente de si la función copia o no el valor en el búfer especificado. El tamaño se devuelve como el número de TCHAR en el valor solicitado, sin incluir el carácter nulo de terminación.

Este parámetro solo se puede establecer en NULL si szSid también es NULL; de lo contrario, la función devuelve ERROR_INVALID_PARAMETER.

Valor devuelto

La función MsiEnumProductsEx devuelve uno de los valores siguientes.

Código devuelto Descripción
ERROR_ACCESS_DENIED
Si el ámbito incluye usuarios distintos del usuario actual, necesita privilegios de administrador.
ERROR_BAD_CONFIGURATION
Los datos de configuración están dañados.
ERROR_INVALID_PARAMETER
Se pasó un parámetro no válido a la función.
ERROR_NO_MORE_ITEMS
No hay más productos que enumerar.
ERROR_SUCCESS
Se enumera un producto.
ERROR_MORE_DATA
El parámetro szSid es demasiado pequeño para obtener el SID de usuario.
ERROR_UNKNOWN_PRODUCT
El producto no está instalado en el equipo en el contexto especificado.
ERROR_FUNCTION_FAILED
Error interno inesperado.

Comentarios

Para enumerar productos, una aplicación debe llamar inicialmente a la función MsiEnumProductsEx con el parámetro iIndex establecido en cero. A continuación, la aplicación debe incrementar el parámetro iProductIndex y llamar a MsiEnumProductsEx hasta que devuelva ERROR_NO_MORE_ITEMS y no haya más productos para enumerar.

Al realizar varias llamadas a MsiEnumProductsEx para enumerar todos los productos, cada llamada debe realizarse desde el mismo subproceso.

Un usuario debe tener privilegios de administrador para enumerar productos en todas las cuentas de usuario o una cuenta de usuario distinta de la cuenta de usuario actual. La enumeración omite los productos que solo se anuncian (como productos no instalados) en el contexto no administrado por usuario al enumerar entre todos los usuarios o un usuario que no sea el usuario actual.

Use MsiGetProductInfoEx para obtener el estado u otra información sobre cada instancia de producto enumerada por MsiEnumProductsEx.

Nota:

El encabezado msi.h define MsiEnumProductsEx como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows Installer 5.0 en Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 en Windows Server 2008 o Windows Vista. Windows Installer 3.0, o posterior, en Windows Server 2003 o Windows XP. Consulte Windows Installer para obtener información sobre el Service Pack mínimo de Windows que requiere una versión de Windows Installer.
Plataforma de destino Windows
Encabezado msi.h
Library Msi.lib
Archivo DLL Msi.dll

Consulte también

MsiEnumProducts

No se admite en Windows Installer 2.0 ni en versiones anteriores

ProductCode

Eliminación de revisiones