Installshield: пользовательское действие для удаления предыдущей версии и установки последней версии

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

  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 ответа

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам