Пакеты прошлых фьючерсов : Вы не можете изменить старые версии своего пакета, чтобы обнаружить более новые. Вы должны встроить защиту в ваши пакеты с самого начала. Packages need to be pre-cognitive. It's an industry problem.
Modern Times : элементы WiX, которые вы показываете выше, «в старом стиле». Здесь описана новая «удобная функция»: Как вы обнаруживаете установленные версии продукта при каждом запуске? Она включает в себя «новый» MajorUpgrade элемент . Этот новый MajorUpgrade элемент обладает некоторой автоматической магией, и я считаю, что он добавляет защиту, которую вы описываете по умолчанию (защита от понижения). Следовательно, вы можете переключиться на его использование. Я бы попробовал это первым. Позвольте мне указать основные разметки:
<MajorUpgrade Schedule="afterInstallInitialize"
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."
AllowDowngrades="no" AllowSameVersionUpgrades="no" />
Помимо удаления элементов обновления старого стиля, не забывайте также удалять любое жестко запрограммированное планирование стандартного действия RemoveExistingProducts
. Например, удалите эту строку (порядковый номер, скорее всего, будет другим, но с тем же именем):
<RemoveExistingProducts Sequence="6550" />
Отключение : Если вы обнаружите, что существует высокий риск того, что люди будут запускать старые версии и связываться с вашим новейшим приложением, вы можете указать новое место установки и новый обновите код до последней версии и установите параллельно, чтобы отделить старые и новые продукты.
Side-by-Side : чтобы это работало, ваш продукт должен быть в состоянии мирно сосуществовать и не бороться за файловые ассоциации, COM для каждой машины зарегистрирован серверы или другие глобальные данные, которые мешают продуктам друг с другом. Возможно ли это или нет, зависит от вашего приложения. Глобальный общий COM-сервер не может быть зарегистрирован из двух разных мест - если вы используете обычную регистрацию в реестре (хотя вы можете использовать основанный на манифестах безрегулярный COM - хотя это иногда бывает) Может быть много проблем, которые нужно преодолеть, прежде чем ваше приложение будет поддерживать параллельную установку, или это может быть довольно тривиально, если ваш пакет прост без участия реестра.
GUID компонентов : необходимо также установить новые GUID компонентов - для всех компонентов - в дополнение к упомянутому изменению кода обновления, чтобы реально защитить продукты от каждого Другой. Если вы используете WiX auto-GUIDs , это произойдет автоматически. Причина, по которой вам нужны новые GUID компонентов, описана здесь: Изменить мой GUID компонента в wix? По существу, ссылка GUID учитывает абсолютное местоположение установки, а не файл как таковой. Вы устанавливаете в новое место, вам нужен новый GUID компонента.