Как осуществляется связь между Windows Vista Session 0 и рабочим столом?
-
09-06-2019 - |
Вопрос
В предыдущих версиях Windows, предшествующих Vista, служба Windows могла взаимодействовать с текущим вошедшим в систему пользователем рабочего стола, чтобы легко отображать информацию из службы на экране.В Windows Vista сеанс 0 был добавлен в целях безопасности, чтобы изолировать службы от рабочего стола.Каков простой способ взаимодействия между службой и приложением, работающим за пределами сеанса 0?До сих пор мне удавалось обойти эту проблему, используя TCP/IP для связи между ними, но это, похоже, небрежный способ сделать это.
Решение
Вы также можете использовать общую память или именованный канал для облегчения IPC.Концептуально это похоже на TCP/IP, но вам не нужно беспокоиться о поиске неиспользуемого порта.
Вы должны убедиться, что создаваемые вами именованные объекты имеют префикс «Глобальный», чтобы обеспечить доступ к ним для всех сеансов, как описано. здесь.
AFAIK, у службы больше нет возможности напрямую взаимодействовать с рабочим столом.
Другие советы
Ведь из соображений безопасности напрямую общаться с «рабочим столом» уже невозможно.Что такое «рабочий стол», когда вы живете на машине с несколькими активными пользователями + удаленными сеансами?
Общий способ решения проблемы — использовать сервисные приложения, которые взаимодействуют через какой-либо механизм RPC (TCP/IP, IPC, каналы удаленного взаимодействия .Net через один из них и т. д.).Это своего рода боль, но я думаю, что преимущества стоят изменений.
Чтобы служба могла взаимодействовать с рабочим столом, вы в значительной степени привязаны к одному из механизмов RPC.Механизм удаленного взаимодействия .NET (IpcServerКанал) не так уж сложно реализовать для этой цели.
Также с помощью .NET настольное приложение может отправлять сообщения непосредственно в службу с помощью Сервисконтроллер.ExecuteCommand.Эти команды принимаются службой через ServiceBase.OnCustomCommand.Это еще проще сделать, и этого будет все, что вам нужно, если управление службой — ваше единственное требование.