Моей первой мыслью было предложить вам взглянуть на функции WTS * и CreateProcessAsUser, а затем я перешел по предоставленной вами ссылке и увидел, что вы уже рассмотрели это и отклонили его.
В качестве альтернативы, если я вас правильно понял, у вас есть служба Windows и графический интерфейс пользователя, который используется для управления службой. Так почему бы не использовать имеющийся у вас канал связи между Сервисом и графическим интерфейсом управления для отправки сообщения от сервиса в графический интерфейс управления, а графический интерфейс управления должен запускать другие приложения с графическим интерфейсом от имени службы? Конечно, это предполагает, что графический интерфейс управления всегда работает.
Вы можете даже сделать это со скрытым приложением, которое не отображается и запускается при входе пользователя в систему. Таким образом, вы снижаете риск непреднамеренного закрытия приложения пользователем. Это будет приложение, отдельное от реального приложения управления. .