WiX - позволяет * вручную * удалить одну MSI для удаления другой MSI, которая использует тот же код UpgradeCode (и не только во время MajorUpgrade)
У меня есть загрузчик (приложения форм C# Windows), которые запускают два разных файла MSI последовательно из своего ресурса. Преобразования экземпляра между msi являются "парными", так что одно преобразование экземпляра из первого msi совместно использует UpgradeCode с одним преобразованием экземпляра из второго msi; это пары, которые устанавливаются вместе через загрузчик.
"Базовая" MSI (первая MSI, которая запускается) включает в себя элемент MajorUpgrade, так что при запуске "основной" MSI с более высокой версией все связанные продукты с более низкой версией сначала удаляются - это включает вторичную программу, установленную через вторую msi, поскольку он использует тот же код UpgradeCode и распознается как связанный продукт. Это поведение, которое я хочу, так что это хорошо, но если я удаляю "базовую" MSI-программу вручную через панель управления, она только устанавливает ее. Я хотел бы получить его, чтобы удалить вторичную программу, даже если я вручную удаляю "основную".
Мне нужно написать пользовательскую функцию, которая вручную вызывает удаление вторичной программы MSI с ProductCode? Например, согласно здесь:
Или я могу явным образом запланировать запуск RemoveExistingProducts для деинсталляций? Что-то вроде:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize">REMOVE</RemoveExistingProducts>
</InstallExecuteSequence>
Разве это не возможно, потому что после InstallFinalize "core" msi, он ничего не знает о вторичной msi? По сути, мне интересно, могу ли я также использовать стандартное действие RemoveExistingProducts для ручного удаления случая, как это происходит для случая MajorUpgrade.
Большое спасибо заранее.
1 ответ
К сожалению, ответ - нет. RemoveExistingProducts не запускается во время операции обслуживания. У вас будут определенные строки в файле журнала, которые указывают, что:
Пропуск действия RemoveExistingProducts: текущая конфигурация - режим обслуживания или удаление
То, что вы пытаетесь сделать, обычно достигается с помощью приложения начальной загрузки. Вы изучали функцию начальной загрузки Wix под названием Burn? Burn должен быть в состоянии легко справиться с вашим требованием.
Если использование Burn не подходит для вас, я не вижу другого выбора, кроме написания собственного кода для достижения этой цели.
Надеюсь это поможет.