Ошибка установки модуля слияния во время серьезного обновления

StackOverflow https://stackoverflow.com//questions/23031511

Вопрос

у меня есть InstallShield InstallScript MSI проект, содержащий ФЛЕКСнет Коннект без модуля слияния Software Manager.Версия этого продукта — 6.0.32.Я создал второй установщик для версии 6.1, который также содержит ФЛЕКСнет Коннект без модуля слияния Software Manager.Когда я выполняю крупное обновление системы, содержащей версию 6.0.32, я получаю сообщение в журнале MSI, в котором говорится:

Disallowing installation of component: {FF970098-B748-427B-B946-AA8E1A1F82AD} since the same component with higher versioned keyfile exists

Компонент ссылается на isusweb.dll файл, расположенный в папке Папка FLEXnet Connect.

Похоже, эта проверка происходит до 6.0.32 продукт удаляется.Установка продолжается с удалением 6.0.32 продукт, который удаляет isusweb.dll.В течение 6.1 установить isusweb.dll не возвращается из-за проверки версии компонента.

Обновление проходит успешно.Когда я пытаюсь запустить приложение с ярлыка, оно проверяет компоненты.Поскольку isusweb.dll отсутствует, MSI пытается восстановить, затем не может найти MSI и не позволяет открыть приложение.

Есть ли способ заставить модуль слияния всегда перезаписывать?

Это было полезно?

Решение

Это подозрительно похоже на эту ошибку:

http://support.microsoft.com/kb/905238/en-us

и я столкнулся с этой ошибкой, и вы видите это сообщение в журнале, а RemoveExistingProducts находится на ранней стадии установки.Он решает не устанавливать файл на основании наличия более высокой версии, но не пересматривает это решение после того, как REP удаляет его.Затем восстановление восстанавливает его при использовании ярлыка.Ошибка должна распространяться только на файлы в GAC или SxS, так что это немного озадачивает.

Если вы можете запланировать REP в конце последовательности транзакций (InstallExecute, REP, InstallFinalize), это должно исправить — возможно, стоит попробовать, поскольку все остальные последствия перемещения в порядке.

Другие советы

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

Я бы рассмотрел возможность создания MSI исключительно с целью инкапсуляции этого MSM.Затем я бы создал предварительную программу установки или установщик пакета, чтобы установить этот MSI отдельно от MSI вашего продукта.

У вас уже есть два действительно хороших ответа, но попробуйте синтезировать:

Это действительно похоже на глючный модуль слияния. Фил предлагает исправить размещение REP в InstallExecuteSequence, чтобы обойти ошибку. Крис предлагает поместить неисправный модуль слияния в собственную настройку.Я согласен с обоими предложениями и думаю, что вам следует следовать обоим предложениям:

  • Удалите модуль слияния из вашей основной настройки.
  • Создайте новую настройку, добавьте неисправный модуль слияния и убедитесь в правильной последовательности REP.

Чтобы исправление REP работало, ссылки на ваши компоненты должны быть на 100 % правильными — сейчас и в будущем.Чтобы устранить это как проблему, создайте отдельная установка позволяет содержать ошибочный модуль внутри собственного MSI.Это поможет вам избежать повторной активации ошибки по ошибке или из-за изменения дизайна в будущем — и последнее никогда не маловероятно.

Как говорит Крис:модуль слияния не доставлен, он объединен.Насколько мне известно, обновленный модуль слияния может быть доступен, но даже в этом случае разумно его содержать.Особенно, когда вы имеете дело с GAC (глобальным кешем сборок).

Другое решение, которое я применил, когда столкнулся с этой ошибкой, заключалось в настройке обновления столбца «Версия» из таблицы файлов в модуле слияния с помощью Orca.Установите максимальное значение 65535.65535.65535.65535, это заставит обновление всегда устанавливать DLL из модуля слияния.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top