Я написал статью в блоге об этом 4 года назад:
MSI vs .NET
В основном ответ уровня эксперта состоит в том, что пользовательские действия класса установщика - злоАнтипаттерн изобретен сообществом .NET.Они являются расширением шаблона RegSvr32 и не соответствуют декларативному дизайну на основе таблиц MSI и не должны использоваться.
Диспетчер управления службами - это неуправляемый API (Advapi32.dll), который предшествует.NET Framework.Установщик Windows уже имел отличную поддержку в 1990-х годах для SCM еще до появления .NET.Затем появился .NET, чтобы создать шаблон для написания управляемых сервисов, и хотя возможность наследования от ServiceBase для получения большей части сантехники бесплатно - это хорошо, использование InstalUtil - нет.
Кстати, вы также должны перейти в DOS и проверить команду SC.Это позволит вам выполнять всевозможные действия по установке службы в случае, если вам нужно что-то делать в среде разработки без запуска MSI.