Все службы запускаются в сессии 0 Служб терминалов. Поэтому, если диалоговая служба показывает на экране пользовательский интерфейс, она видима только для пользователя, который подключился к сессии 0. Поскольку нет никакого способа гарантировать, что пользователь работающий в диалоговом режиме связан с сессией 0, не конфигурируйте службу, так чтобы запускать ее как диалоговый сервис Служб терминалов или Windows XP (быстрое пользовательское переключение осуществляется, используя Службы терминалов).
Если служба, запускающаяся во многопользовательской системе должна взаимодействовать с пользователем, служба должна создать отдельное приложение GUI, запускающееся в пределах контекста пользователя работающего в диалоговом режиме. Самый легкий путь запуска приложения на каждой сессии состоит в том, чтобы добавить ее к следующему ключу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. |
Это приложение GUI должно быть разработано так, чтобы общаться со службой через некоторый метод IPC, например, именованные каналы, как описано в предыдущей статье. При помощи использования именованных каналов, сервер может различать между несколькими пользовательскими процессами, давая каждому каналу уникальное имя, основанное на идентификаторе сессии.