2016-08-30 2 views
0

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

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

Как вы можете создать такой пакет установки, если это вообще возможно?

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

ответ

1

Для этого вам нужны две (более поздние) отдельные установки. Основное различие между ними состоит в том, что у вас есть таблица Upgrade (которая будет производить серьезную модернизацию уже установленного продукта, заменив его в Program & Features), а другая не будет иметь таблицу Upgrade, а это означает, что это просто другая продукт устанавливается в бок о бок сценарий. В обоих случаях у них есть ProductCode, который отличается от всех установленных Продуктов.

Вам понадобится автозагрузка, потому что я не думаю, что вы можете сделать это любым другим способом. Загрузочный загрузчик спрашивает у пользователя, что делать и запускает выбор установки. Вам не нужны два файла MSI - у вас может быть один MSI с преобразованием (файл .mst), который удаляет (или добавляет) записи в таблицу Upgrade. Вы можете использовать Orca в MSI с элементами таблицы Upgrade, удалите записи, создающие преобразование. Для обновления просто запустите файл MSI нормально; для параллельного запуска MSI с командной строкой, которая включает TRANSFORMS = [файл mst, который удаляет таблицу обновления].

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

Возможно, существует более простая альтернатива: это действие RemoveExistingProducts, которое выполняет удаление старого продукта. Если есть способ обнаружить (например, через значение свойства), который пользователь хочет установить отдельно, вы можете сделать действия RemoveExistingProducts условными для свойства.

Смежные вопросы