На выходном канале есть два подписчика - привязка канала (в связывателе) и ваш маршрутизатор.
В течение DirectChannel
с алгоритмом диспетчеризации по умолчанию является циклический перебор, поэтому вы поочередно отправляете сообщения на маршрутизатор и напрямую в подшивку.
Вам нужен другой DirectChannel
@Bean
для активатора службы, чтобы все сообщения отправлялись туда, а затем в подшивку после маршрутизации.
См. sourceChannel
в этом образце.
Если Вы не должны на самом деле выполнять удаление другого компонента, Вы могли использовать Пользовательское действие для удаления файлов/папок, которые Вы намереваетесь заменить.
Используя Пользовательское действие вынудит Вас сделать все действия уборки, которые Деинсталлятор сделал бы для Вас.
Случается так заменой чего-то, или Вы просто пытаетесь удалить что-то в результате установки чего-то совершенно различного?
Пошаговая демонстрация пользовательского действия MSDN
Я также прочитал несколько статей от Phil Wilson, которые были полезны с Пользовательскими действиями:
Phil Wilson на пользовательских действиях
Я столкнулся с подобной проблемой, которая потребовала нескольких установок для совместной работы, и я не смог найти рекурсивный запуск MsiExec. Решение, которое я использовал, заключалось в том, чтобы связать установщик со сценарием, который запускает MsiExec один раз для установки / удаления старого пакета, а затем снова для запуска нового установщика. Клиенты должны были запустить скрипт для установки.
Если вы найдете лучший способ, дайте мне знать.
Я думаю, что можно работать uninst.exe
из той программы через оболочку управляют, в то время как установка запускается.....