Проект InstallScript, выдающий ошибку 1706 при обновлении - PullRequest
1 голос
/ 24 июня 2010

У меня есть проект InstallScript, написанный с нуля в InstallShield 2010. Он содержит, помимо прочего, три собственных объекта InstallShield и четыре объекта-держателя модуля InstallShield Merge, которые обертывают файлы MSM.

Когда я первоначально тестировал проект, он отлично устанавливался в чистой среде, но когда я попытался обновить его до более новой версии, каждый из четырех объектов-держателей модулей слияния выдал сообщение «Ошибка 1706. Не найден действительный источник для продукта XXXX».

Я покопался в сети и обнаружил, что это ошибка установщика Windows, и это происходит потому, что файл MSI должен существовать на компьютере даже после того, как исходный установочный носитель пропал.Рекомендованный способ убедиться в том, что установлен флажок «локально кэшировать MSI-пакет» в диалоговом окне свойств объекта-держателя модуля слияния.

Я установил этот флажок для всех четырех модулей слияния и провел повторное тестирование, но это помоглоне решить проблему.Затем я посмотрел, где эти модули слияния фактически помещаются на жесткий диск.В диалоговом окне свойств указано <DISK1TARGET>, которое разрешается до C:\Program Files\InstallShield Installation Information\ {GUID продукта} во время выполнения.Глядя на тестовую машину, казалось, что все четыре модуля слияния записывают в одно и то же место, перезаписывая тем самым файлы MSI друг друга.

Чтобы обойти это, я отредактировал каждый модуль слияния, чтобы кэшировать себя в уникальныйпуть, <DISK1TARGET>\ {Имя} .Я скомпилировал и протестировал снова, и я вижу, что каждый модуль слияния теперь действительно сохраняет себя в уникальной подпапке.Однако все четыре сообщения об ошибках 1706 все еще появляются при обновлении.

У кого-нибудь есть какие-нибудь идеи?Я уверен, что упускаю что-то очевидное, но это нигде не документировано.: -)

ОБНОВЛЕНИЕ:

Судя по большому количеству сообщений на форумах InstallShield, InstallShield генерирует новый GUID продукта для каждого встроенного MSI при каждой сборке.проект InstallScript.Во время процесса обновления механизм InstallShield перезаписывает каждый файл MSI, кэшированный на целевом компьютере, более новой версией, но когда дело доходит до их выполнения, установщик Windows говорит: «Эй, это новый продукт, где находится MSI старого продукта, так что яможно удалить? ", отсюда и ошибка.

Можно ли сказать InstallShield, что он не должен заново генерировать GUID продукта для каждого встроенного MSI в каждой сборке?Конечно, это поведение делает насмешкой над всей идеей встраивания модулей слияния в проекты InstallScript?: - (

1 Ответ

0 голосов
/ 12 июля 2010

Я получил эту работу:

  1. Получение автономных установок MSI, соответствующих МСМ, которые у нас уже были.К счастью, это стало возможным для всех из них.
  2. Включая MSI в качестве устанавливаемых компонентов в проекте InstallScript, установленном в подходящем временном расположении на цели.
  3. В соответствующем событии <feature>_Installed,выполните команду msiexec.exe и запустите файл MSI с помощью переключателей /i и /qb.
  4. В соответствующем событии <feature>_UnInstalling перейдите к msiexec.exe и запустите файл MSI с помощью /x switch.

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

...