Я бы попробовал использовать комбинацию ответов выше.
Чтобы решить # 1
При входе в систему запустите приложение Winforms, используя автозапуск в реестре или в папке автозагрузки. Сделайте так, чтобы уведомить службу об успешном запуске.
Чтобы убедиться, что приложение Winform успешно запущено после входа пользователя в систему:
Пусть ваш сервис проверяет, запущено ли приложение в фоновом режиме, как сейчас, но не позволяйте ему выполнить первоначальный запуск.
Вместо этого просто дайте ему зарегистрироваться, когда пользователь входит в систему, это можно сделать, прослушивая OnSessionChange.
Установите задержку на X секунд, чтобы процесс входа в систему / запуска завершился до того, как он начнет проверять работающее приложение (возможно, не лучшее решение).
Если служба обнаруживает, что приложение не запущено или происходит сбой, перезапустите его из службы, используя метод, который указывает Марк, CreateProcessAsUser.