Функция 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
Ограничивает перечисление контекстом для каждого пользователя,неуправляемого, управляемого пользователем или компьютера. Этот параметр может быть любым из следующих значений.
[in] cPatchInfo
Количество исправлений в массиве.
[in] pPatchInfo
Указатель на массив структур MSIPATCHSEQUENCEINFO .
Возвращаемое значение
Функция MsiDeterminePatchSequence возвращает следующие значения.
Значение | Значение |
---|---|
|
Функция завершилась ошибкой, не описанной в других кодах ошибок. |
|
Недопустимый аргумент. |
|
Не удалось найти допустимую последовательность для набора исправлений. |
|
Не удается открыть пакет установки, на который ссылается путь. |
|
Исправления успешно отсортированы. |
|
Файл .msi не найден. |
|
Путь к файлу .msi не найден. |
|
Недопустимые данные исправления XML. |
|
Пакет установки был недопустимым. |
|
Пользователь, который не является администратором, попытался вызвать функцию с контекстом другого пользователя. |
|
Недопустимые данные конфигурации для зарегистрированного исправления или продукта. |
|
Указанный GUID ProductCode не зарегистрирован. |
|
Для определения оптимальной последовательности исправлений требуется установщик Windows версии 3.0. Функция была вызвана с помощью szProductCode , еще не установленного в установщике Windows версии 3.0. |
|
Эта ошибка может быть возвращена, если функция была вызвана из пользовательского действия или если MSXML 3.0 не установлен. |
|
Указанное исправление неизвестно. |
Комментарии
Пользователи, у которых нет прав администратора, могут вызывать эту функцию только в собственном контексте или контексте компьютера. Пользователи, которые являются администраторами, могут вызывать его для других пользователей.
Если эта функция вызывается из настраиваемого действия, она завершается ошибкой и возвращает 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 |
См. также раздел
Не поддерживается в установщике Windows 2.0 и более ранних версий