WiX - позволяет * вручную * удалить одну MSI для удаления другой MSI, которая использует тот же код UpgradeCode (и не только во время MajorUpgrade)

У меня есть загрузчик (приложения форм C# Windows), которые запускают два разных файла MSI последовательно из своего ресурса. Преобразования экземпляра между msi являются "парными", так что одно преобразование экземпляра из первого msi совместно использует UpgradeCode с одним преобразованием экземпляра из второго msi; это пары, которые устанавливаются вместе через загрузчик.

"Базовая" MSI (первая MSI, которая запускается) включает в себя элемент MajorUpgrade, так что при запуске "основной" MSI с более высокой версией все связанные продукты с более низкой версией сначала удаляются - это включает вторичную программу, установленную через вторую msi, поскольку он использует тот же код UpgradeCode и распознается как связанный продукт. Это поведение, которое я хочу, так что это хорошо, но если я удаляю "базовую" MSI-программу вручную через панель управления, она только устанавливает ее. Я хотел бы получить его, чтобы удалить вторичную программу, даже если я вручную удаляю "основную".

Мне нужно написать пользовательскую функцию, которая вручную вызывает удаление вторичной программы MSI с ProductCode? Например, согласно здесь:

Wix - удалить другой продукт

Или я могу явным образом запланировать запуск RemoveExistingProducts для деинсталляций? Что-то вроде:

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallFinalize">REMOVE</RemoveExistingProducts>
</InstallExecuteSequence>

Разве это не возможно, потому что после InstallFinalize "core" msi, он ничего не знает о вторичной msi? По сути, мне интересно, могу ли я также использовать стандартное действие RemoveExistingProducts для ручного удаления случая, как это происходит для случая MajorUpgrade.

Большое спасибо заранее.

1 ответ

Решение

К сожалению, ответ - нет. RemoveExistingProducts не запускается во время операции обслуживания. У вас будут определенные строки в файле журнала, которые указывают, что:

Пропуск действия RemoveExistingProducts: текущая конфигурация - режим обслуживания или удаление

То, что вы пытаетесь сделать, обычно достигается с помощью приложения начальной загрузки. Вы изучали функцию начальной загрузки Wix под названием Burn? Burn должен быть в состоянии легко справиться с вашим требованием.

Если использование Burn не подходит для вас, я не вижу другого выбора, кроме написания собственного кода для достижения этой цели.

Надеюсь это поможет.

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