Развертывание SCCM MSI не удалось с ошибкой 0x87D00324

Вопрос или проблема

У меня есть MSI, созданный с помощью WIX, который может запускаться локально от имени администратора без ошибок. Однако при развертывании через SCCM как установка приложения, импортированного из MSI, в Центре программного обеспечения отображается, как неудавшаяся с кодом 0x87D00324. В обоих случаях фактическая установка завершается успешно (файлы и записи в реестре создаются как и ожидалось, и приложение загружается).

Ошибка SCCM указывает, что продукт не обнаружен после установки. Если установить вручную, используя ту же командную строку, которая настроена в SCCM (msiexec /i [msi здесь] /qn), Центр программного обеспечения показывает, что приложение установлено, что означает, что правила обнаружения верны — обнаружение настроено на поиск установленного кода продукта. AppEnforce.log предлагает, что происходит следующее:

  • SCCM устанавливает MSI без ошибок
  • После установки пытается обнаружить MSI
  • Не удается обнаружить, помечает развертывание как неудачное

MSI настроен на установку для всех пользователей (ALLUSERS=1 как свойство MSI, а не в командной строке) и требует повышения привилегий для запуска. Задание SCCM настроено как «Установить для системы» и «Только когда ни один пользователь не вошел в систему» и нацелено на определенные машины, а не на пользователей.

С включенным журналированием MSI для всей машины в выводе журналов есть некоторые различия, которые, как я полагаю, могут способствовать возникновению проблемы:

  • Установка, выданная SCCM, имеет запись в журнале: PROPERTY CHANGE: Deleting ALLUSERS property. Its current value is '1', хотя неясно, что вызывает это
    • Это происходит, даже если ALLUSERS=1 указано как аргумент командной строки для msiexec — как «Adding ALLUSERS…», а затем «Deleting ALLUSERS…» несколькими строками позже
  • Этап/запись лога ProductPublish имеет значение Assignment, равное 0, когда установлено через SCCM (эквивалентно “Per User”, согласно документации) и 1, когда установлено вручную (эквивалентно “Per Machine”)
  • Установка SCCM приводит к созданию трех журналов MSI, а не одного журнала, как в случае ручной установки
    • Один показывает, что MSI вызывается с действием ADVERTISE
    • Один, который, по-видимому, не вызывает msiexec вообще, но, возможно, это остаток журнала действия ADVERTISE в другом файле по какой-то причине
    • MSI вызывается с пустым действием (в журнале позже появляется как действие INSTALL)

После установки Get-WmiObject -Namespace root\ccm\CIModels -Class CCM_MSIProduct имеет различный вывод для двух методов установки:

  • Установлено через SCCM, нет записи для нового приложения – я предполагаю, что это причина, по которой SCCM считает, что приложение не установлено
  • Установлено вручную, новое приложение появляется с правильными данными

Оба метода показывают, что приложение установлено при запросе через wmic product get.

Клиент: Windows 10 Enterprise, клиент SCCM 5.0.0.8577.1115

Сервер: SCCM 1710 (5.0.0.8577.1115)

Обновление 12 апреля 2018, дополнительная информация:

  • Задание SCCM работает на некоторых машинах, но между ними нет очевидной общности
  • Задание SCCM можно навсегда исправить на данной машине, используя pstools для запуска MSI как SYSTEM — если сделать это один раз, удаление MSI вручную, а затем повторная установка через SCCM работают и обнаруживаются правильно (это очевидно бесполезно, но интересный результат)
  • Журналирование на неудачных машинах указывает, что действия выполняются в контексте пользователя, а не в контексте всей машины
    • Using cached product context: User assigned for product: 6176BC215761514458869E9B9ABB08BC
  • Журналирование на неудачных машинах показывает несколько раз строку выше, в то время как журналирование на работающих машинах, кажется, обращается к множеству кодов продуктов в контексте машины
  • После установки через SCCM в неудачном состоянии единственное очевидное различие в реестре происходит в HKLM\Software\Classes\Installer\Products\[[Product Code]]\AdvertiseFlags, который равен 0x180 в неудачном состоянии и 0x184 в успешном состоянии
  • Наша команда операций предполагает, что сбои начались, когда была включена замена для задания, хотя я не могу подтвердить, касается ли это всех сбоев

Что может вызвать различие в поведении между заданием SCCM и ручной установкой? Что может вызвать выполнение задания SCCM в контексте пользователя, даже если оно, похоже, выполняется как SYSTEM и настроено для установки для системы?

Как вы упомянули, оно пытается прорекламировать MSI, а не установить, что странно. Возможно, вам нужно пересмотреть скрипт или прочитать его в Orca и посмотреть.

Вы случайно не проверяли, появляется ли код продукта, который определен в обнаружении, в реестре.

32-битный:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Product code

или

64-битный:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Product code

Ответ или решение

Теория

Проблема, с которой вы столкнулись, связана с некорректной установкой MSI-пакетов через System Center Configuration Manager (SCCM). Ошибка с кодом 0x87D00324 свидетельствует о том, что после установки SCCM не может найти продукт, что указывает на проблемы с правилами обнаружения или с контекстом установки.

При ручной установке MSI-пакета продукт успешно обнаруживается, что подтверждает корректность настроек обнаружения. Однако проблемы возникают при установке через SCCM, что указывает на возможную проблему в среде выполнения SCCM или в конфигурации установки.

Пример

Ваш MSI-пакет создан с помощью WIX и успешно устанавливается локально с правами администратора. Однако при развёртывании через SCCM процесс завершения установки сопровождается ошибкой 0x87D00324. В логах SCCM (AppEnforce.log) заметны следующие этапы:

  1. MSI устанавливается без ошибок.
  2. После установки происходит попытка обнаружения, которая заканчивается неудачей.
  3. SCCM считает установку неудавшейся.

Применение

Для решения проблемы следуйте следующим шагам:

  1. Проверка ключей реестра:

    • Убедитесь, что продуктовый код, на который настроено правило обнаружения, присутствует в реестре после установки. Проверьте следующие пути для разных архитектур:
      • 32-битные системы: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\код_продукта
      • 64-битные системы: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\код_продукта
  2. Анализ контекста установки:

    • Возможно, SCCM запускает MSI в пользовательском контексте, несмотря на настройку "Install for System". Проверьте, чтобы конфигурация SCCM была настроена на установку в контексте системы и в отсутствие активных пользователей.
  3. Удаление свойств, изменяющих контекст:

    • В логах MSI вы упоминаете, что свойство ALLUSERS изменяется. Попробуйте явно установить это свойство на уровне командной строки в SCCM.
  4. Проверка и модификация скрытых настроек:

    • Убедитесь, что в конфигурации SCCM не установлены свойства, ведущие к рекламе (advertise) MSI вместо установки. Логи указывают на наличие этапа ADVERTISE.
  5. Выявление и устранение влияния устаревших настроек:

    • Выясните влияние включенной функции суперсессии на установку. Если проблема появилась с её активацией, рассмотрите возможность её отключения для тестирования.
  6. Тестирование с SYSTEM:

    • Используйте инструменты, такие как pstools, чтобы проверить установку пакета от имени SYSTEM на проблемных машинах. Это может помочь установить, где происходит сбой в контексте установки.

Эти шаги должны помочь обнаружить и исправить ошибку, обеспечивая корректное создание и обработку контекста установки, что позволит SCCM успешно обнаружить и зарегистрировать приложение после установки.

Оцените материал
Добавить комментарий

Капча загружается...