Как вы общаетесь между Windows Vista Session 0 и Desktop? - PullRequest
6 голосов
/ 11 сентября 2008

В предыдущих версиях Windows до Vista вы могли взаимодействовать со службой Windows с текущим пользователем, вошедшим в систему на настольном компьютере, для простого отображения информации на экране из службы. В Windows Vista Session 0 был добавлен для обеспечения безопасности, чтобы изолировать сервисы от рабочего стола. Какой простой способ связи между службой и приложением, запущенным вне сеанса 0? До сих пор я справлялся с этим, используя TCP / IP для связи между ними, но это, похоже, неаккуратный способ сделать это.

Ответы [ 3 ]

4 голосов
/ 11 сентября 2008

Вы также можете использовать разделяемую память или именованный канал для облегчения IPC. Концептуально это похоже на TCP / IP, но вам не нужно беспокоиться о поиске неиспользуемого порта.

Вы должны убедиться, что к созданным именованным объектам добавлен префикс «Global \», чтобы к ним могли обращаться все сеансы, как описано здесь .

AFAIK, сервис больше не может напрямую взаимодействовать с рабочим столом.

3 голосов
/ 11 сентября 2008

Действительно, по соображениям безопасности больше невозможно напрямую общаться с «рабочим столом». Что такое «рабочий стол» в любом случае, когда вы живете на машине с несколькими активными пользователями + удаленными сессиями?

Общий способ решения этой проблемы - использование сервисных приложений, которые взаимодействуют через некоторый механизм RPC (TCP / IP, IPC, каналы .Net Remoting через один из них и т. Д.) Это своего рода боль, но я думаю, что преимущества того стоят.

1 голос
/ 11 сентября 2008

Чтобы служба могла общаться с рабочим столом, вы в значительной степени застряли с одним из механизмов RPC. Механизм удаленного взаимодействия .NET ( IpcServerChannel ) не так сложно реализовать для этой цели.

Также с помощью .NET настольное приложение может отправлять сообщения непосредственно в службу с помощью ServiceController.ExecuteCommand . Эти команды принимаются службой через ServiceBase.OnCustomCommand . Это еще проще сделать, и это будет все, что вам нужно, если единственное требование - контролировать службу.

...