Обновление использует настраиваемое действие OnCommit из предыдущего установщика
При обновлении моего решения с версии 1 до 2 с использованием нового MSI я заметил одно из моих пользовательских действий, которые настраивают приложение, используя значения, принадлежащие версии 1 (в действии OnCommit)
Я добавил сообщения и журналы, которые распечатывают версию сборки, и подтвердил, что во время обновления установщик Windows использует dll из предыдущего MSI. Однако, если я вручную устанавливаю более новый MSI, используется правильное настраиваемое действие.
Есть ли способ обойти это? Не нашли много информации о том, почему он использует предыдущие пользовательские действия?
Я установил RemovePreviousVersions = true
и UpgradeCodes равны, а ProductCodes разные.
1 ответ
Я считаю, что это старая ошибка:
https://support.microsoft.com/en-us/kb/555184
и есть другая статья поддержки об этом, которую я не могу найти. Возможно, он был удален, поскольку он применяется к более старым версиям проектов установки. Я думаю, что обходные пути - это такие вещи, как переименование сборки и изменение ее версии.
Проблема (как вы можете догадаться) заключается в том, что деинсталляция загружает сборку для деинсталляции, а сборка из установки обновления идентична, поскольку правила загрузки определяют в этой ситуации (отражающая загрузка), поэтому она не загружает вашу новая сборка, но использует старую, которая уже загружена. Все это подразумевает, что вы используете очень старую версию проектов установки Visual Studio, которая сначала удаляет старый продукт, а затем устанавливает новый. Это не было поведением по умолчанию с тех пор (включая Visual Studio 2008), поэтому я не думаю, что вы столкнетесь с проблемой более новой версии.