Поделиться через


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

Функция MsiDeterminePatchSequence принимает набор файлов исправлений, XML-файлов и BLOB-объектов XML и определяет оптимальную последовательность применения исправлений для указанного установленного продукта. Эта функция учитывает исправления, которые уже были применены к продукту, и учетные записи для устаревших и замененных исправлений.

Синтаксис

UINT MsiDeterminePatchSequenceW(
  [in]           LPCWSTR                szProductCode,
  [in, optional] LPCWSTR                szUserSid,
  [in]           MSIINSTALLCONTEXT      dwContext,
  [in]           DWORD                  cPatchInfo,
  [in]           PMSIPATCHSEQUENCEINFOW pPatchInfo
);

Параметры

[in] szProductCode

Продукт, который является целевым для набора исправлений. Значение должно быть идентификатором GUID ProductCode для продукта.

[in, optional] szUserSid

Строка, завершающаяся значением NULL, указывающая идентификатор безопасности (SID) пользователя. Этот параметр ограничивает контекст перечисления для этой учетной записи пользователя. Этот параметр не может быть специальными строками идентификатора безопасности S-1-1-0 (все) или S-1-5-18 (локальная система). Для контекста компьютера параметр dwContext имеет значение MSIINSTALLCONTEXT_MACHINE а szUserSid должен иметь значение NULL. Для текущего контекста пользователя szUserSid может иметь значение NULL, а параметру dwContextзначение MSIINSTALLCONTEXT_USERMANAGED или MSIINSTALLCONTEXT_USERUNMANAGED.

[in] dwContext

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

Тип контекста Значение
MSIINSTALLCONTEXT_USERMANAGED
Исправления учитываются для всех управляемых пользователем установок продукта для пользователя, указанного в szUserSid. Значение null szUserSid в этом контексте означает текущего пользователя.
MSIINSTALLCONTEXT_USERUNMANAGED
Исправления учитываются для всех неуправляемых установок для пользователя, указанного в szUserSid. Значение null szUserSid в этом контексте означает текущего пользователя.
MSIINSTALLCONTEXT_MACHINE
Исправления учитываются для установки на каждом компьютере. Если параметру dwContext присвоено значение MSIINSTALLCONTEXT_MACHINE параметр szUserSid должен иметь значение NULL.

[in] cPatchInfo

Количество исправлений в массиве.

[in] pPatchInfo

Указатель на массив структур MSIPATCHSEQUENCEINFO .

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

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

Значение Значение
ERROR_FUNCTION_FAILED
Функция завершилась ошибкой, не описанной в других кодах ошибок.
ERROR_INVALID_PARAMETER
Недопустимый аргумент.
ERROR_PATCH_NO_SEQUENCE
Не удалось найти допустимую последовательность для набора исправлений.
ERROR_INSTALL_PACKAGE_OPEN_FAILED
Не удается открыть пакет установки, на который ссылается путь.
ERROR_SUCCESS
Исправления успешно отсортированы.
ERROR_FILE_NOT_FOUND
Файл .msi не найден.
ERROR_PATH_NOT_FOUND
Путь к файлу .msi не найден.
ERROR_INVALID_PATCH_XML
Недопустимые данные исправления XML.
ERROR_INSTALL_PACKAGE_INVALID
Пакет установки был недопустимым.
ERROR_ACCESS_DENIED
Пользователь, который не является администратором, попытался вызвать функцию с контекстом другого пользователя.
ERROR_BAD_CONFIGURATION
Недопустимые данные конфигурации для зарегистрированного исправления или продукта.
ERROR_UNKNOWN_PRODUCT
Указанный GUID ProductCode не зарегистрирован.
ERROR_FUNCTION_NOT_CALLED
Для определения оптимальной последовательности исправлений требуется установщик Windows версии 3.0. Функция была вызвана с помощью szProductCode , еще не установленного в установщике Windows версии 3.0.
ERROR_CALL_NOT_IMPLEMENTED
Эта ошибка может быть возвращена, если функция была вызвана из пользовательского действия или если MSXML 3.0 не установлен.
ERROR_UNKNOWN_PATCH
Указанное исправление неизвестно.

Комментарии

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

Если эта функция вызывается из настраиваемого действия, она завершается ошибкой и возвращает ERROR_CALL_NOT_IMPLEMENTED. Функция требует MSXML версии 3.0 для обработки XML и возвращает ERROR_CALL_NOT_IMPLEMENTED , если MSXML 3.0 не установлен.

Функция MsiDeterminePatchSequence задает элементы uStatus и dwOrder каждой структуры MSIPATCHSEQUENCEINFO , на которую указывает pPatchInfo. Каждая структура содержит сведения о конкретном исправлении.

Если функция выполняется успешно, структура MSIPATCHSEQUENCEINFO каждого исправления, которое может быть применено к продукту, возвращает значение uStatusERROR_SUCCESS и dwOrder больше или равно нулю. Значения dwOrder больше или равные нулю указывают на оптимальную последовательность приложений для исправлений, начиная с нуля.

Если функция выполняется успешно, исправления, исключенные из лучшей последовательности исправлений, возвращают структуру MSIPATCHSEQUENCEINFO с dwOrder , равным -1. В таких случаях поле uStatusERROR_SUCCESS указывает на исправление, которое является устаревшим или замененным для продукта. Поле uStatusERROR_PATCH_TARGET_NOT_FOUND указывает на исправление, которое неприменимо к продукту.

Если функция завершается ошибкой, структура MSIPATCHSEQUENCEINFO для каждого исправления возвращает dwOrder , равный -1. В этом случае поля uStatus могут содержать ошибки с дополнительными сведениями об отдельных исправлениях. Например, ERROR_PATCH_NO_SEQUENCE возвращается для исправлений с циклической информацией о последовательности.

Примечание

Заголовок msi.h определяет MsiDeterminePatchSequence в качестве псевдонима, который автоматически выбирает версию 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, необходимом для версии установщика Windows, см. в статье Требования к установщику Windows Run-Time.
Целевая платформа Windows
Header msi.h
Библиотека Msi.lib
DLL Msi.dll

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

MSIPATCHSEQUENCEINFO

MsiDetermineApplicablePatches

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

ProductCode