Существуют ли особые требования к службе Windows для отправки сообщений в окна пользователей?

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

Вопрос

Мне нужно написать приложение-службу Windows (без графического пользовательского интерфейса), которое будет отслеживать событие и, если оно произойдет, отправлять стандартное сообщение Windows приложению.Дескриптор приложения будет передан службе с помощью DLL, которая затем выгружается, поэтому мы хотим использовать сообщение Windows.

Однако вопрос заключается в том, нужно ли службе делать что-то особенное, чтобы использовать SendMessage для дескриптора окна, учитывая, что оно может находиться на другом экране или что-то в этом роде в Vista.Возможно ли это, и если да, то что мне нужно сделать, пожалуйста?

Это было полезно?

Решение

Изоляция привилегий пользовательского интерфейса (UIPI):

Microsoft Windows Vista и более поздние версии.Отправка сообщения подлежит изоляции привилегий пользовательского интерфейса (UIPI).Поток процесса может отправлять сообщения только в очередь сообщений потоков в процессах меньшего или равного уровня целостности.

Источник

Вы можете прочитать о Изоляция привилегий пользовательского интерфейса (UIPI) здесь.

Чтобы обойти это, вы можете установить для uiAccess значение true в файле манифеста.Вы также должны убедиться, что ваше приложение подписано с использованием Authenticode с сертификатом от центра подписи, такого как VeriSign.Это может стоить довольно дорого.


Изоляция сеанса 0:

Я также считаю, что вы не можете вызывать SendMessage между сеансами.Итак, если у вас есть служба, работающая в сеансе 0, вам нужно найти другое средство для связи с вашим процессом, который будет работать в сеансе > 0.Пример:через трубу.

В Windows Vista, Windows 2008 Server и более поздних версиях все службы запускаются в сеансе 0, а все запускаемые вами приложения выполняются в сеансе > 0.Это называется изоляцией сеанса 0.Вот хороший документ, в котором есть вся информация об изоляции сеанса 0.

Если у вас нет доступа к источнику программы, в которую вы хотите отправлять сообщения, вы можете обойти это, создав приложение, которое взаимодействует с вашим сервисом и действует как прокси-сервер для ретрансляции сообщения приложению в том же сеансе. .


Общий:

Если вы разрабатываете свое приложение на пре-Vista, и оно работает нормально.Eсть очень высоко есть шанс, что он сломается в Vista.

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