Ответы:
В основном из соображений безопасности.
Как я понимаю, когда служба окон создает GUI элементы управления , такие как MessageBox, они обычно можно увидеть только в сессии , что пробеги услуги в то Session 0 , которые также используются , чтобы быть первым пользователь вошел в систему локально или кем - то протоколирования на использовании mstsc / admin. Следовательно, этот пользователь увидит эти элементы управления и сможет взаимодействовать со службой.
Но по соображениям безопасности сеанс 0 теперь зарезервирован, и первый пользователь, который войдет в систему, получит новый сеанс и, следовательно, не увидит элементы управления GUI.
Поскольку это нарушает довольно много служб, для совместимости существует процесс (см. Этот блог MSDN), который пытается обнаружить, отображаются ли какие-либо сообщения, и всплывает с предупреждением: «Программа, запущенная на этом компьютере, пытается отобразить сообщение. и позволяет просматривать или игнорировать сообщение.
У Microsoft есть WhitePaper на эту тему, которую вы можете скачать здесь
Я также подозреваю, что другая незначительная причина заключается в том, что эта функция была неправильно использована / неправильно понята и привела к плохим проектам. Например, у меня был старый сервер со сторонним сервисом, который отображал некоторые уведомления / ошибки, используя окно сообщения вместо записи в журнал событий. Но я никогда не заходил локально и редко заходил в режиме администратора и, следовательно, я не видел сообщений.
Раньше интерактивные сервисы были возможны , но сервисная модель - это процесс, который выполняется независимо от любого пользователя. Они предназначены для запуска без присмотра и поэтому не нуждаются в графическом интерфейсе.
Интерактивные сервисы не были доступны с Windows Vista, поэтому больше не должны использоваться.
Если вам нужно взаимодействовать со службой, на странице, на которую я ссылаюсь, рекомендуется создать отдельное приложение с графическим интерфейсом, которое связывается со службой посредством межпроцессного взаимодействия (IPC) какого-то рода, например именованных каналов.
Поскольку службы должны работать в фоновом режиме, не взаимодействуя с пользователем; на самом деле они могут работать, пока ни один пользователь не вошел в систему.
Да, это было возможно, и это сработало. Когда вы вошли в систему, вы получили интерфейс приложения. Это было очень полезно для старых приложений, которые не имеют доступной службы, но все еще должны работать на сервере. Хотя это было не самое стабильное решение. Он стал работать как пользователь, который мог щелкнуть его или выйти из системы. Это было не очень приятно.
Теперь каждый разрабатывает нативные сервисы и добавляет приложение или журнал для управления сервисом. Это хороший шаблон дизайна, который сейчас используется в большинстве случаев.
Так что воспринимайте это скорее как наследство, чтобы это было возможно.
Сервисы предназначены для не посещаемых операций, в основном в фоновом режиме. Сам сервис имен означает действовать как сервер для некоторых клиентских приложений или других сервисов, которые используют этот сервис. Поэтому теперь MS может захотеть придерживаться основ и хочет провести четкое различие между сервисами и приложениями. Так что приложения поддерживают занятость пользователей и позволяют сервисам выполнять свои задачи в молчании. В то время как есть гвоздодер, зачем идти за кухонным ножом, чтобы резать ноль?