Installshield: пользовательское действие для удаления предыдущей версии и установки последней версии - PullRequest
0 голосов
/ 30 апреля 2018

Мои требования следующие:

  1. Если приложение с версией, например, 12.0 устанавливается на C:\Folder1, и установка с версией 13.0 должна быть установлена ​​в папке C:\Folder1, тогда установка версии 13.0 должна автоматически удалить версию 12.0 и установить последнюю версию 13.0

  2. Если приложение с версией, например, 12.0 устанавливается на C:\Folder1, и установка с версией 13.0 должна быть установлена ​​в папке C:\Folder200, тогда установка 13.0 должна установить последнюю версию и также сохранить версию 12.0

То, что я пробовал:

  1. Если я использую метод кода обновления для удаления предыдущей версии, то удаление предыдущих версий произойдет, даже если предыдущая версия установлена ​​в любом месте системы.

  2. Использование настраиваемых действий - создайте vbscript для чтения установленных продуктов, используя данные WindowsInstaller.Products, и, используя код продукта, создали команду для удаления приложения с помощью "msiexec.exe / x ProductCode"

    • Это пользовательское действие при добавлении в раздел «Перед передачей файлов» в проекте установки щита выдает всплывающее окно «Приложение устанавливает версию и ожидает завершения процесса».
    • Для свойства «Ожидание действия» для настраиваемого действия установлено значение «Да».
    • Я попытался установить его на "Нет", но все равно появляется такое же всплывающее окно.
    • Если я добавлю настраиваемое действие в раздел «После успешного завершения настройки» в проекте установки щита, обе версии будут установлены, и после выполнения vbscript будет удалена предыдущая версия. Проблема с этим подходом заключается в том, что, когда я дважды щелкаю значок на рабочем столе приложения; он начинает установку и отображает всплывающее окно о ходе установки. Это будет сбивать с толку для клиента. Так что такой подход не подходит.
  3. Мы не добавили никаких данных в реестр, поэтому не можем использовать метод реестра для удаления предыдущих версий.

Это очень основное требование для любого программного обеспечения, но я не могу понять, как этого добиться. Пожалуйста, дайте мне знать, если у кого-нибудь есть указатели.

У меня установлена ​​Installshield с ограниченным выпуском 2015 и Visual Studio 2015 Professional.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Вы не можете сделать это, потому что MSI не важно, где установлена ​​предыдущая версия продукта. Новый MSI с кодом UpgradeCode (и некоторыми другими деталями) обновит существующий продукт, который соответствует, удалив этот старый продукт, где бы он ни был установлен.

Некоторые проблемы (не полный список):

  1. Если вы хотите установить другой продукт и НЕ обновлять существующий продукт, то вам нужен MSI, который (например) имеет другой код UpgradeCode или не выполняет RemoveExistingProducts.

  2. Вашим MSI (старым и новым) необходимо установить ARPINSTALLLOCATION, чтобы вы могли спросить, где они установлены. Это позволяет сравнивать места установки (но IMO не идеальное решение).

  3. Существуют проблемы, такие как наличие у двух отдельных установленных продуктов одинаковых ярлыков в меню «Пуск», наличие общих файлов в общих местах, наличие каких-либо не подлежащих обмену элементов (имена служб, глобальные параметры). имена событий и т. д.).

  4. Существуют также проблемы с удобством сопровождения, такие как обновление или исправление двух почти идентичных установленных продуктов.

В любом случае, я бы просто спросил пользователя, хочет ли он выполнить обновление или параллельную установку, а не основывать это решение на выборе папки (что кажется IMO необычным побочным эффектом выбора места установки) ,

Общий выбор, вероятно, основан на наличии условия для действия RemoveExistingProducts, основанном на свойстве командной строки или другом механизме. Или, в зависимости от требований удобства обслуживания, вы можете изменить код обновления (с преобразованием в командной строке), чтобы обновление не происходило. Для меня не ясно, что определить местоположение установки предыдущего MSI в диалоговом окне просмотра папки новой установки просто.

0 голосов
/ 01 мая 2018

Боюсь, что MSI не слишком хорошо подходит для такого рода сценариев - как вы обнаружили.

  • Это корпоративное программное обеспечение или оно предназначено для широкого распространения ?
  • Какова цель этого подхода с несколькими инстанциями? Эффективно ли этот MSI устанавливает две разные версии одного и того же приложения?

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

Как заявляет PhilDW, вы можете использовать другой код обновления для новейшего MSI, а затем установить его параллельно со старой установкой. Помимо того, что уже было упомянуто, вам также необходимо изменить все GUID компонентов для нового пакета. WiX позволяет автоматически генерировать GUID компонентов на основе пути назначения, но не для Installshield. Необходимо использовать экземпляр преобразования для параллельной установки без изменения всех GUID компонентов - я полагаю.

App-V : Если вы работаете в корпоративной среде и у меня достаточно опыта, я бы также порекомендовал вам проверить упаковку App-V (виртуализация). Это позволяет изолировать приложения, чтобы несколько версий могли работать параллельно. Но опять же, я не тот парень, который может рассказать вам историю изнутри. Я знаю, что есть ряд ограничений, но не могу уточнить этот опыт.

Setup.exe Launcher : если ваше приложение изящно обрабатывает несколько экземпляров без конфликтных ярлыков, имени службы и т. Д. (Как описывает Фил), вы можете установить все новые версии и никогда не удаляйте старые версии по умолчанию через таблицу обновлений. Затем вы можете обработать удаление предыдущих версий вручную в вашем setup.exe лаунчере (если есть). Я полагаю, что вы могли бы использовать концепцию преобразования экземпляра для установки новых версий или заново создать настройки для каждой новой версии со всеми новыми GUID компонентов и GUID продуктов, пакетов и обновлений.

Устаревший проект Installscript : Я полагаю, вы можете отказаться от MSI и использовать унаследованный проект Installscript для развертывания своего приложения. Я бы не рекомендовал это, поскольку такие проекты проблематичны для надежного удаленного управления и тихой работы (как для установки, так и для удаления).


Некоторые ссылки на ответственное хранение:

0 голосов
/ 30 апреля 2018

Это на самом деле не является «базовым требованием для любого программного обеспечения». Основы, если установлен ProductCode / UpgradeCode, обновите его.

Для пункта 2 вы получаете всплывающее окно, потому что вы пытаетесь запустить 2 MSI ExecuteSequence одновременно. Если вы хотите продолжить этот путь, вам придется перенести действие удаления в UISequence. Помните, что автоматическая установка не запустит это действие, поскольку оно никогда не попадет в последовательность UIS. Кроме того, лучший способ пойти по этому пути - создать собственный загрузчик (setup.exe), который контролирует процесс удаления / установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...