WiX 3.0 выдает ошибку 217 при выполнении непрерывной интеграции
-
21-08-2019 - |
Вопрос
Это ошибка, которая выдается нашим пакетом автоматической сборки в Windows 2008 при запуске ДВС (после перехода из WiX 2.0 до WiX 3.0):
LGHT0217:Ошибка выполнения действия ICE «ICE01».Наиболее распространенной причиной такого рода сбоя ICE является неправильно зарегистрированный скриптовый движок.Видеть http://wix.sourceforge.net/faq.html#Error217 подробности и способы решения этой проблемы.Следующий формат строки не ожидался средством регистрации сообщений внешнего пользовательского интерфейса:«Не удалось получить доступ к службе установщика Windows.Это может произойти, если установщик Windows установлен неправильно.Обратитесь за помощью к сотрудникам службы поддержки.».в Light.exe(0, 0)
Кроме того, в журнале событий отображаются ошибки:
MSI-установщик:Не удалось подключиться к серверу.Ошибка:0x80070005 Продукт:[ProductName] — Ошибка 1719.Не удалось получить доступ к службе установщика Windows.Это может произойти, если установщик Windows установлен неправильно.Обратитесь за помощью к сотрудникам службы поддержки.
Интуитивно:
- VBScript и JScript были зарегистрированы под админом.
- Служба интеграции имеет разрешения на взаимодействие с рабочим столом и всеми файлами.
- Сборки выполняются успешно, если они выполняются вручную на том же компьютере другим пользователем или даже пользователем, вошедшим в систему под учетной записью интеграции (через РДП)
У меня пока нет идей.
Как мне решить эту проблему, сохраняя проверку ICE?
Решение
Конец истории:
Поигравшись с разрешениями учетной записи интеграции, ДКОМ, активация услуги и т.д.безуспешно, я, наконец, просто отключил проверку ICE в сборке непрерывной интеграции, сохраняя при этом ее в локальной сборке.
Чтобы отключить проверку ICE, вы можете установить для SuppressValidation значение true в файле .wixproj:
<PropertyGroup>
<SuppressValidation>true</SuppressValidation>
</PropertyGroup>
Или передать -sval
параметр командной строки для light.exe
.
Другие советы
Добавление учетной записи контроллера сборки TFS в локальную группу администраторов и перезапуск службы Windows помогли мне.
Я нашел первопричину.Я перепробовал все, что нашел, включая собственное расширение валидатора, подобное тому, которое опубликовано в Ре:[Пользователи WiX] Light.exe произошёл сбой при запуске ICE..
Это не проблема параллелизма, как предлагается в различных темах.Это вызвано слишком большим блоком среды процесса (PEB).
Оказывается, установщик Windows не может обработать блок среды процесса размером более 32 КБ.В моей среде из-за количества переменных, установленных системой сборки, и их размера (например, переменная PATH содержащий несколько повторяющихся значений), PEB составлял около 34 КБ.
Интересно, за Переменные среды, Windows XP и 2003 имели жесткое ограничение PEB, равное 32 килобайтам.Это, вероятно, приведет к легко обнаруживаемому прерыванию сборки на более раннем этапе сборки.В более новых версиях Windows такого ограничения нет, но я предполагаю, что разработчики установщика Windows ограничили буферы внутренней среды размером 32 КБ и корректно завершают работу при превышении этого значения.
Проблему легко воспроизвести:
- Создайте файл .bat, в котором задаются переменные среды, размер которых превышает 32 КБ.Например, это может быть 32 строки
set Variable<number>=<text longer than 1024 characters>
- Запустите cmd.exe
- Запустите созданный вами командный файл
- Из того же окна cmd.exe:
- Попробуйте собрать пакет MSI с помощью WiX с проверкой ICE в OR.
- Бегать
smoke.exe
для проверки вашего пакета ИЛИ - Просто запустите
msiexec /i Package.msi
- Все приведенные выше команды в конечном итоге сообщат
Error 1719 - Windows Installer could not be accessed
.
Итак, решение такое: просмотрите свои сценарии сборки и уменьшите количество и размер переменных среды, чтобы все они уместились в 32 КБ.Вы можете легко проверить результаты, выполнив:
set > environment.txt
Цель — получить файл environment.txt
меньше ~30 КБ.
Правильное описание (без решения, за исключением случаев, когда добавление учетной записи CruiseControl в группу локальных администраторов может считаться решением) проблемы:
Цитата из Wix 3.5 и круиз-контроль выдают ошибку LGHT0217:
Валидация льда нуждается в интерактивной учетной записи или привилегиях администратора, чтобы быть счастливыми.См. например Проекты WiX против.Сборка команды TFS 2010 (14 ноября 2009 г.) или Ре:[Пользователи WiX] Помогите со сборкой патча (2009-11-20).
Имаги совершенно права!Я не мог поверить, что это правильный ответ.Подавление проверки и назначение администратора пользователя TFS не являются хорошими решениями.Кроме того, я не смог найти NT\Authority, чтобы добавить его в группу «Администраторы», и полностью застрял в этом.
Я получил ту же ошибку в центре обработки данных Windows Server 2012, что и агент сборки.Решить проблему :
- Пункт списка
- Перейдите в раздел «Переменные среды» на компьютере с агентом сборки.
- Создайте две системные переменные
"PF86"
что равно"C:\Program Files (x86)"
"PF"
что равно"C:\Program Files"
- Они такие короткие, потому что я хочу сохранить символы. Я сделал их без конечной обратной косой черты, потому что TEMP, TMP и другие были созданы такими, и я решил придерживаться стандарта MS для этих переменных.
- Отредактируйте переменную PATH, заменив каждую
"C:\Program Files (x86)"
с%PF86%
и каждый"C:\Program Files"
с%PF%
- Закрывайте, стройте и наслаждайтесь!
- Это сработало для меня.:)
От http://wix.sourceforge.net/faq.html#Error217:
В WiX v3 Light автоматически выполняет проверку: Внутренние оценщики согласованности (ICE) установщика Windows--после каждой успешной сборки.Валидация - отличный способ поймать общие ошибки авторизации, которые могут привести к проблемам обслуживания, поэтому теперь она работает по умолчанию.К сожалению, есть общая проблема, которая возникает в Windows Vista и Windows Server 2008, которая может привести к сбое ICE.Подробную информацию о причине и способах ее устранения см. Блог Хита Стюартаи Веб-журнал Аарона Стебнера.
Я получал ту же ошибку ICE, но проблема оказалась в поврежденной службе установщика Windows.Это решение сработало для меня:http://support.microsoft.com/kb/315353
- Войдите в свой компьютер как администратор.
- Нажмите «Пуск», а затем нажмите «Выполнить».
- В поле Открыть введите cmd и нажмите кнопку ОК.
- В командной строке введите msiexec.exe /unregister и нажмите клавишу ВВОД.
- Введите msiexec/regserver и нажмите клавишу ВВОД.
- Перезагрузите Windows
Кроме того, убедитесь, что системная учетная запись имеет полные разрешения на контроль доступа к HKEY_CLASSES_ROOT в реестре Windows.В некоторых случаях вам также может потребоваться добавить учетные записи администратора.
У меня есть несколько предложений.
- Попробуйте обновить версию Microsoft Installer на сервере сборки.
- Убедитесь, что вы используете новейшую версию WiX 3.0, поскольку сейчас это стабильная версия 3.0.
- Если ничего не помогает, попробуйте запустить службу сборки от имени конкретного пользователя сборки, для которого вы можете настроить разрешения...
Я столкнулся с той же проблемой и не хотел подавлять проверку ICE.Моя установка:Я использовал свой компьютер в качестве агента сборки Visual Studio Online (VSO).Мое решение состояло в том, чтобы изменить учетную запись, используемую для запуска службы на моем компьютере.Вместо использования сетевой службы или локальной службы я просто вошел в систему под своей учетной записью, у которой были все необходимые права.
Перейдите на свою сборочную машину и перезапустите службу установщика Windows.
Ни одно из вышеперечисленных предложений не помогло мне, для меня на сцену вышел антивирус (mcafee), который, похоже, обновил запись реестра vbscript.dll в неправильное расположение DLL.Вот что следует иметь в виду:
- Некоторые проверки WiX ICE реализованы с использованием VBSCRIPT.
- Таким образом, при компиляции MSI серверу сборки потребуется доступ к файлу c:\windows\system32\vbscript.dll.
- Скорее всего, пользователь, запускающий вашу сборку, каким-то образом потерял доступ к этой DLL.
- Как упоминалось в ответах выше, найдите доступ администратора/доступ к реестру и убедитесь, что он есть у вашего пользователя.
Вот шаги, которые я предпринял для устранения проблемы:
- Откройте cmd (запускайте от имени администратора) на компьютере с агентом сборки.
- Запустите RegEdit
- Выберите корень, затем нажмите Ctrl + F и найдите следующую запись реестра:{B54F3741-5B07-11cf-A4B0-00AA004A55E8}
- Найдите ключ InprocServer32\Default.
- В моем агенте сборки путь был заменен расположением DLL mcafee.Я обновил путь обратно к c:\windows\system32\vbscript.dll.
- Редактировать запись реестра было непросто, поскольку это была защищенная запись реестра.Я использовал ссылку ниже, чтобы изменить права доступа, прежде чем я смогу редактировать свойство: Редактировать защищенную запись реестра
Как только я обновил путь, все стало работать как обычно.