Это довольно сложная кривая обучения, но да, WiX / InstallShield / MSI может это сделать.Я сделал установщики для систем n-Tier / SOA, включая SaaS с одним арендатором, где вы могли десятки раз запускать установщик прикладного уровня, создавая новые экземпляры, работающие на разных заголовках хоста или портах, указывающих на разные уровни данных и разные параметры конфигурации.Затем вы можете сделать то же самое для WebUI, указывая, какой уровень приложения вам нужен.
В основном, будь то установка .NET, настройка vDir / AppPools / WebSites / Extensions, чтение и запись файлов конфигурации XML, выполнение SQLСценарии, создание сервисов и т. д. все это может быть сделано ... если вы потратите время, чтобы изучить все это.Разработка развертывания - это более крупный домен, чем кажется на первый взгляд.
Что касается .BAT, это плохая форма.Сначала вы работаете над использованием собственных возможностей, прежде чем писать собственные действия.Затем, когда вам нужно написать один, вы проектируете его как декларативный и транзакционный (установка, удаление, откат, фиксация).WiX имеет действительно хорошую среду под названием DTF, которая позволяет инкапсулировать классы C #, как если бы они были C ++ с точки зрения MSI, и предоставляет хорошую библиотеку взаимодействия, необходимую для общения с MSI во время установки.