Я пошел по этому пути, и он усложняется быстрее, чем можно было бы ожидать.
Я думаю, что у меня есть два компонента (несмотря на их взаимоисключающие условные выражения) с одним и тем же файлом ключей, но разными ресурсами ServiceInstall / Controlнарушение правил компонентов.
Способ, который я предлагаю сделать, - переместить всю вашу бизнес-логику в отдельный компонент DLL и создать два разных компонента EXE.Настройте одно как приложение консоли / Windows, а другое как приложение-службу.Свяжите компоненты с двумя различными функциями, чтобы конечный пользователь мог решить, каким образом он хочет настроить приложение.Затем пользователь может выполнить операцию изменения в программах добавления / удаления и использовать MSI, чтобы изменить свое решение и позже.