Не так много информации о том, как вы устанавливаете сервисы, или какой инструмент вы используете для генерации 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-битной системы, если проблема связана с кросс-архитектурной архитектурой.