Установка MSI успешно завершена, но службы не установлены, ошибка MsiExec в журнале событий - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть установщик MSI, который устанавливает две службы Windows.При установке на 64-разрядную машину Windows Server 2016 ошибок нет, установка выполнена успешно, но службы не установлены.Мне удалось установить службы вручную с помощью installutil, но нет никаких подсказок относительно того, почему MSI не удалось установить службы.Установщик до сих пор работал в сотнях установок.Мне удалось получить журналы событий с компьютера, и единственные ошибки, которые я смог найти, были в журнале приложений:

     Faulting application name: MsiExec.exe, version: 5.0.14393.0, time 
     stamp: 0x57899002
     Faulting module name: MSIC9AE.tmp, version: 4.0.30319.33440, time 
     stamp: 0x52004298
     Exception code: 0xc0000005
     Fault offset: 0x000064ff
     Faulting process id: 0x2244
     Faulting application start time: 0x01d3db09c12691f2
     Faulting application path: C:\Windows\syswow64\MsiExec.exe
     Faulting module path: C:\Windows\Installer\MSIC9AE.tmp
     Report Id: c5ffdc35-5ccd-4b00-9d60-1a198848062e
     Faulting package full name: 
     Faulting package-relative application ID: 

Повторная установка с подробным ведением журнала не является вариантом.Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 24 апреля 2018

Не так много информации о том, как вы устанавливаете сервисы, или какой инструмент вы используете для генерации MSI и установки этих сервисов, но я могу сделать некоторые предположения из этого журнала:

Похоже, что вы используете настраиваемые действия класса установщика для установки служб. В каждом случае, о котором я знаю (кроме установок Visual Studio), это не нужно. Установщик Windows имеет встроенную поддержку для установки служб без запуска какого-либо кода. Пользовательские действия (вместо стандартных встроенных функций) подвержены ошибкам. Более совершенные инструменты обеспечивают поддержку таблицы ServiceInstall и таблицы ServiceControl , что избавляет вас от необходимости запуска кода и связанных с этим проблем.

Этот журнал показывает, что вы запускаете 32-разрядный процесс msiexec.exe для установки служб в 64-разрядной системе. Я считаю, что 32-разрядная подсистема является необязательной на Windows Server, но неясно, является ли это проблемой, поскольку установка, очевидно, проходит успешно, хотя сбои класса установщика обычно выдают ошибку и полностью откатывают установку. Вы устанавливаете молча? Другая проблема может заключаться в том, что нет 32-битного NET FW для запуска этого (очевидно) 32-битного пользовательского действия. Или есть несоответствие архитектуры NET FW (у вас есть некоторый код NET 2, пытающийся работать во время выполнения 4.0). Если этой ошибке 0xC0000005 нужно доверять, то у вас есть нарушение прав доступа в коде настраиваемого действия - настраиваемые действия работают путем извлечения кода из двоичной таблицы MSI в файл .tmp случайного имени и последующего вызова из процесса msiexec.exe поэтому, возможно, код пользовательского действия по какой-то причине потерял доступ к этой папке \ installer. Есть также C ++ shim Dll, который загружает платформу для запуска управляемого кода, так что здесь есть место для сбоя зависимости C ++

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

Windows требует разных настроек для разных архитектур, поэтому для 64-битной установки стоит убедиться, что весь код настраиваемого действия явно создан для 64-битной системы, если проблема связана с кросс-архитектурной архитектурой.

...