Функция MsiEnumProductsExA (msi.h)

Функция MsiEnumProductsEx перечисляет один или все экземпляры продуктов, которые в настоящее время объявляются или устанавливаются в указанных контекстах. Эта функция заменяет MsiEnumProducts.

Синтаксис

UINT MsiEnumProductsExA(
  [in, optional]      LPCSTR            szProductCode,
  [in]                LPCSTR            szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwIndex,
  [out, optional]     CHAR [39]         szInstalledProductCode,
  [out, optional]     MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional]     LPSTR             szSid,
  [in, out, optional] LPDWORD           pcchSid
);

Параметры

[in, optional] szProductCode

Код продукта GUID перечисляемого продукта. Перечисляются только экземпляры продуктов в область контекста, заданного параметрами szUserSid и dwContext. Для этого параметра можно задать значение NULL , чтобы перечислить все продукты в указанном контексте.

[in] szUserSid

Строка, завершающаяся значением NULL, которая указывает идентификатор безопасности (SID), ограничивающий контекст перечисления. Специальная строка sid s-1-1-0 (Все) указывает перечисление для всех пользователей в системе. Значение SID, отличное от s-1-1-0, считается идентификатором безопасности пользователя и ограничивает перечисление текущим пользователем или любым пользователем в системе. Для этого параметра можно задать значение NULL, чтобы ограничить область перечисления текущим пользователем.

Тип SID Значение
NULL
Указывает текущего пользователя, вошедшего в систему.
Идентификатор безопасности пользователя
Задает перечисление для конкретного пользователя в системе. Пример идентификатора безопасности пользователя— "S-1-3-64-2415071341-1358098788-3127455600-2561".
s-1-1-0
Указывает перечисление для всех пользователей в системе.
 
Примечание Специальная строка идентификатора безопасности s-1-5-18 (System) не может использоваться для перечисления продуктов или исправлений, установленных в качестве отдельных компьютеров. Если параметру dwContext присвоено значение только MSIINSTALLCONTEXT_MACHINE, значение szUserSid должно иметь значение NULL.
 

[in] dwContext

Ограничивает перечисление контекстом. Этот параметр может быть любым или сочетанием значений, приведенных в следующей таблице.

Контекст Значение
MSIINSTALLCONTEXT_USERMANAGED
Перечисление распространяется на все управляемые на пользователя установки для пользователей, указанных в szUserSid. Недопустимый идентификатор безопасности не возвращает элементов.
MSIINSTALLCONTEXT_USERUNMANAGED
Перечисление распространяется на все неуправляемые установки для пользователей, указанных в szUserSid. Недопустимый идентификатор безопасности не возвращает элементов.
MSIINSTALLCONTEXT_MACHINE
Перечисление распространяется на все установки для каждого компьютера. Если параметру dwInstallContext присвоено значение только MSIINSTALLCONTEXT_MACHINE, параметр szUserSID должен иметь значение NULL.

[in] dwIndex

Указывает индекс извлекаемого продукта. Этот параметр должен иметь нулевое значение для первого вызова функции MsiEnumProductsEx , а затем увеличиваться для последующих вызовов. Индекс следует увеличивать, только если предыдущий вызов вернул ERROR_SUCCESS. Так как продукты не заказываются, любой новый продукт имеет произвольный индекс. Это означает, что функция может возвращать продукты в любом порядке.

[out, optional] szInstalledProductCode

Строка TCHAR , завершающаяся null, которая предоставляет идентификатор GUID ProductCode перечисляемого экземпляра продукта. Этот параметр может принимать значение NULL.

[out, optional] pdwInstalledContext

Возвращает контекст перечисляемого экземпляра продукта. Выходные значения могут быть MSIINSTALLCONTEXT_USERMANAGED, MSIINSTALLCONTEXT_USERUNMANAGED или MSIINSTALLCONTEXT_MACHINE. Этот параметр может принимать значение NULL.

[out, optional] szSid

Выходной буфер, который получает строковый идентификатор безопасности учетной записи, в которой находится данный экземпляр продукта. Этот буфер возвращает пустую строку для экземпляра, установленного в контексте для каждого компьютера.

Этот буфер должен быть достаточно большим, чтобы содержать идентификатор безопасности. Если буфер слишком мал, функция возвращает ERROR_MORE_DATA и присваивает *pcchSid числу TCHAR в идентификаторе безопасности, не включая завершающий символ NULL.

Если для szSid задано значение NULL , а pcchSid — допустимый указатель, функция возвращает ERROR_SUCCESS и присваивает *pcchSid числу TCHAR в значении, не включая завершающее значение NULL. Затем функцию можно вызвать снова, чтобы получить значение, при этом буфер szSid достаточно большой, чтобы содержать *pcchSid + 1 символов.

Если оба значения szSid и pcchSid имеют значение NULL, функция возвращает ERROR_SUCCESS, если значение существует, без извлечения значения.

[in, out, optional] pcchSid

При вызове функции этот параметр должен быть указателем на переменную, указывающую количество TCHAR в буфере szSid . Когда функция возвращает значение, для этого параметра устанавливается размер запрошенного значения независимо от того, копирует ли функция значение в указанный буфер. Размер возвращается как число TCHAR в запрошенном значении, не включая завершающий символ NULL.

Для этого параметра можно задать значение NULL , только если szSid также имеет значение NULL, в противном случае функция возвращает ERROR_INVALID_PARAMETER.

Возвращаемое значение

Функция MsiEnumProductsEx возвращает одно из следующих значений.

Код возврата Описание
ERROR_ACCESS_DENIED
Если область включает пользователей, отличных от текущего пользователя, вам потребуются права администратора.
ERROR_BAD_CONFIGURATION
Данные конфигурации повреждены.
ERROR_INVALID_PARAMETER
В функцию передан недопустимый параметр.
ERROR_NO_MORE_ITEMS
Больше нет продуктов для перечисления.
ERROR_SUCCESS
Продукт перечисляется.
ERROR_MORE_DATA
Параметр szSid слишком мал, чтобы получить идентификатор безопасности пользователя.
ERROR_UNKNOWN_PRODUCT
Продукт не установлен на компьютере в указанном контексте.
ERROR_FUNCTION_FAILED
Непредвиденный внутренний сбой.

Комментарии

Для перечисления продуктов приложение должно сначала вызвать функцию MsiEnumProductsEx с параметром iIndex , равным нулю. Затем приложение должно увеличить параметр iProductIndex и вызвать MsiEnumProductsEx , пока не вернется ERROR_NO_MORE_ITEMS и больше не будет продуктов для перечисления.

При выполнении нескольких вызовов MsiEnumProductsEx для перечисления всех продуктов каждый вызов должен выполняться из одного потока.

Пользователь должен иметь права администратора для перечисления продуктов во всех учетных записях пользователей или в учетной записи пользователя, отличной от текущей учетной записи пользователя. Перечисление пропускает продукты, которые объявляются только (например, продукты, не установленные) в контексте неуправляемого пользователя при перечислении для всех пользователей или пользователей, отличных от текущего пользователя.

Используйте MsiGetProductInfoEx , чтобы получить состояние или другие сведения о каждом экземпляре продукта, перечисляемом MsiEnumProductsEx.

Примечание

Заголовок msi.h определяет MsiEnumProductsEx в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows 3.0 или более поздней версии в Windows Server 2003 или Windows XP. Сведения о минимальном пакете обновления Windows, необходимом для версии установщика Windows, см. в разделе Требования к установщику Windows Run-Time.
Целевая платформа Windows
Header msi.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

MsiEnumProducts

Не поддерживается в установщике Windows 2.0 и более ранних версий

ProductCode

Удаление исправлений