У меня была похожая ситуация, хотя количество файлов было немного меньше, около 25к. Большинство из этих файлов были иконками, которые никогда не менялись от одного выпуска к другому. Только основной выпуск (один раз в 2 года) может внести некоторые изменения в эту область. «Быстрое и грязное» решение заключалось в архивировании этих значков и включении этого единственного файла в установку (не компонента, а файла рядом с MSI). Во время установки этот ZIP был извлечен в фоновом потоке, а таблица RemoveFile использовалась для удаления значков при удалении. Это было быстрее, чем установка этих значков по 20 тыс. В качестве отдельных компонентов, даже как компонентов с большим количеством файлов. Хорошим и правильным решением было убедить разработчиков основных приложений поместить все эти значки по 20 тыс. В 20 zip-архивов. Теперь эти 20 zip-файлов установлены как обычные компоненты MSI, и приложение знает, как извлечь значок по требованию и кэшировать его.
Я бы не рекомендовал вам отключать откат. Хотя вы сэкономите довольно много времени на установку, вы потеряете стандартную гарантированную опцию отката.
Удаление занимает больше времени, чем установка из-за функции отката снова. Насколько я понимаю, при удалении MSI сначала создает копию каждого отдельного файла, затем удаляет каждый отдельный файл, а в случае успеха удаляет каждый резервный файл. Следовательно, время удаления примерно в три раза больше времени установки. У меня возникла та же проблема, когда я выбрал вариант по умолчанию для одного файла на компонент. Хотя это рекомендуется, вам следует пойти на компромисс, если вы имеете дело с неурегулированным делом.
Надеюсь, это немного прояснит для вас вещи.