WIX v3.9 Burn custom BA удаляет связанные пакеты последними, а не первыми

Недавно мы перешли на специальный загрузчик для нашего установщика. Это позволяет пользователю выбирать из списка возможных модулей для установки (каждый в виде отдельных файлов MSI). Сейчас мы делаем наше первое обновление и столкнулись с проблемой. Burn должным образом обновляет MSI, но он не имеет дело с загрузчиком, который указан в ARP. Он пытается удалить загрузчик последним, но затем терпит неудачу, потому что более высокая версия загрузчика уже установлена.

Согласно этой статье https://support.firegiant.com/entries/24024208-Bundle-chain-execution-order- в порядке выполнения обновления должен быть сначала удален соответствующий пакет:

"При планировании удаления движок Burn сначала планирует все связанные пакеты. Таким образом, связанные пакеты всегда удаляются до удаления связанных пакетов.

Тем не менее, это не то поведение, которое мы видим. Связанный пакет удаляется последним:

[11C4:0868][2015-02-26T10:09:26]i102: Detected related bundle: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, type: Upgrade, scope: PerMachine, version: 7.5.0.0, operation: MajorUpgrade
...
[11C4:0868][2015-02-26T10:09:38]i207: Planned related bundle: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, type: Upgrade, default requested: Absent, ba requested: Absent, execute: Uninstall, rollback: Install, dependency: None
[11C4:0868][2015-02-26T10:09:38]i299: Plan complete, result: 0x0
...
[1224:0E20][2015-02-26T10:23:26]i301: Applying execute package: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, action: Uninstall, path: C:\ProgramData\Package Cache\{9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}\FlexSimInstaller.exe, arguments: '"C:\ProgramData\Package Cache\{9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}\FlexSimInstaller.exe" -uninstall -quiet -burn.related.upgrade -burn.ancestors={36ff969e-da98-4c27-9dde-20e090c0812f}'
[11C4:0868][2015-02-26T10:23:35]i319: Applied execute package: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, result: 0x0, restart: None
[11C4:0868][2015-02-26T10:23:35]i399: Apply complete, result: 0x0, restart: None, ba requested restart:  No
[11C4:0868][2015-02-26T10:23:38]i500: Shutting down, exit code: 0x0

Мы знаем, что нет способа изменить порядок, так как же заставить работать обновление?

1 ответ

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

Если ваш БА пытается предотвратить понижение рейтинга, он должен также рассмотреть действия. Например, WixStdBA позволяет выполнять удаление следующим образом:

if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < action)
Другие вопросы по тегам