Вопрос или проблема
У меня есть 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…» несколькими строками позже
- Это происходит, даже если ALLUSERS=1 указано как аргумент командной строки для
- Этап/запись лога
ProductPublish
имеет значениеAssignment
, равное 0, когда установлено через SCCM (эквивалентно “Per User”, согласно документации) и 1, когда установлено вручную (эквивалентно “Per Machine”) - Установка SCCM приводит к созданию трех журналов MSI, а не одного журнала, как в случае ручной установки
- Один показывает, что MSI вызывается с действием
ADVERTISE
- Один, который, по-видимому, не вызывает
msiexec
вообще, но, возможно, это остаток журнала действияADVERTISE
в другом файле по какой-то причине - MSI вызывается с пустым действием (в журнале позже появляется как действие
INSTALL
)
- Один показывает, что MSI вызывается с действием
После установки 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
) заметны следующие этапы:
- MSI устанавливается без ошибок.
- После установки происходит попытка обнаружения, которая заканчивается неудачей.
- SCCM считает установку неудавшейся.
Применение
Для решения проблемы следуйте следующим шагам:
-
Проверка ключей реестра:
- Убедитесь, что продуктовый код, на который настроено правило обнаружения, присутствует в реестре после установки. Проверьте следующие пути для разных архитектур:
- 32-битные системы:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\код_продукта
- 64-битные системы:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\код_продукта
- 32-битные системы:
- Убедитесь, что продуктовый код, на который настроено правило обнаружения, присутствует в реестре после установки. Проверьте следующие пути для разных архитектур:
-
Анализ контекста установки:
- Возможно, SCCM запускает MSI в пользовательском контексте, несмотря на настройку "Install for System". Проверьте, чтобы конфигурация SCCM была настроена на установку в контексте системы и в отсутствие активных пользователей.
-
Удаление свойств, изменяющих контекст:
- В логах MSI вы упоминаете, что свойство
ALLUSERS
изменяется. Попробуйте явно установить это свойство на уровне командной строки в SCCM.
- В логах MSI вы упоминаете, что свойство
-
Проверка и модификация скрытых настроек:
- Убедитесь, что в конфигурации SCCM не установлены свойства, ведущие к рекламе (advertise) MSI вместо установки. Логи указывают на наличие этапа
ADVERTISE
.
- Убедитесь, что в конфигурации SCCM не установлены свойства, ведущие к рекламе (advertise) MSI вместо установки. Логи указывают на наличие этапа
-
Выявление и устранение влияния устаревших настроек:
- Выясните влияние включенной функции суперсессии на установку. Если проблема появилась с её активацией, рассмотрите возможность её отключения для тестирования.
-
Тестирование с SYSTEM:
- Используйте инструменты, такие как
pstools
, чтобы проверить установку пакета от имени SYSTEM на проблемных машинах. Это может помочь установить, где происходит сбой в контексте установки.
- Используйте инструменты, такие как
Эти шаги должны помочь обнаружить и исправить ошибку, обеспечивая корректное создание и обработку контекста установки, что позволит SCCM успешно обнаружить и зарегистрировать приложение после установки.