Как осуществляется связь между Windows Vista Session 0 и рабочим столом?

StackOverflow https://stackoverflow.com/questions/55639

  •  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.Это еще проще сделать, и этого будет все, что вам нужно, если управление службой — ваше единственное требование.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top