Что может вызвать ошибку 2902 при установке MSI? - PullRequest
6 голосов
/ 30 октября 2009

Один из наших MSI начал давать сбой с ошибкой 2902. Он пройдёт большую часть процесса установки, выведет окно с ошибкой, а затем вернет установку. Со времени последней рабочей версии мы не вносили существенных изменений в установщик.

Запуск msiexec с включенным ведением журнала дает более информативное сообщение:

Action 17:21:22: RegisterProduct. Registering product
Error 2902:  Operation ixoFileCopy called out of sequence

Это происходит сразу после раздела «WriteRegistryValues». Кто-нибудь знает, что вызывает вызов ixoFileCopy? Я предполагаю, что решение будет включать изменение последовательности шага «RegisterProduct», но я не уверен, что это должно продолжаться.

Спасибо за любую помощь!

Ответы [ 4 ]

2 голосов
/ 30 октября 2009

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

1 голос
/ 23 мая 2013

Я также видел эту ошибку, когда компоненты снабжены пустыми направляющими.

, например

<Component Id="cmp_MyFailingComponent" Guid="">
  <File Id="f_myFile"
    Assembly=".net"
    Source="C:\Program Files\MyFile.dll"
    KeyPath="yes"/>
</Component>
1 голос
/ 14 января 2011

У меня была такая же ошибка.

Судя по всему, файлы отсутствовали или были повреждены (ошибка сети?). Проблема была решена после повторного копирования всей папки.

0 голосов
/ 06 ноября 2014

Я видел эту ошибку, когда некоторые поля столбцов базы данных длиннее ширины столбца.

Я преобразовал MSI в проект InstallShield, сделал несколько дополнений и создал новый MSI - он собран без каких-либо ошибок. Установка не удалась с ошибкой 2902.

Сбой компонентов, имена которых длиннее допустимых 72 символов. (см. таблицу компонентов) Оригинальный MSI работал нормально, несмотря на длинные имена, но я думаю, что они заставили InstallShield каким-то образом неправильно построить MSI. Не ошибка InstallShield, хотя я думаю, что это должно было вызвать ошибку во время сборки.

...