Сессия 0 Изоляция - PullRequest
       46

Сессия 0 Изоляция

0 голосов
/ 21 января 2009

Vista выпускает новую защиту, запрещающую сеансу 0 доступ к оборудованию, такому как видеокарта, и пользователь больше не входит в сеанс 0. Я знаю, это означает, что я не могу показать пользователю графический интерфейс, однако это также означает, что я не может показать один вообще? То, как мой код настроен прямо сейчас, было бы больше работы, чтобы сделать его только командной строкой, однако, если бы я мог использовать свой существующий код и просто программно управлять GUI, это заняло бы намного меньше кода.

Возможно ли это?

В статье из MSDN говорится:

• Служба пытается создать пользовательский интерфейс (например, диалоговое окно) в сеансе 0. Поскольку пользователь не работает в сеансе 0, он или она никогда не видит пользовательский интерфейс и, следовательно, не может предоставить ввод, который сервис ищет. Похоже, что служба перестает функционировать, поскольку ожидает ответа пользователя, который не происходит.

Это заставляет меня думать, что возможно иметь автоматический пользовательский интерфейс, но кто-то сказал мне, что вы не можете использовать SendKeys со службой, потому что она была отключена в сеансе 0.

РЕДАКТИРОВАТЬ: На самом деле мне не нужно показывать пользователю графический интерфейс

Ответы [ 3 ]

1 голос
/ 22 января 2009

Вы можете показать один; это просто не появляется.

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

В любом случае, на самом деле есть команда API TerminalServices для переключения активного сеанса, который вы могли бы вызвать, если он действительно нужен для отображения.

0 голосов
/ 22 января 2009

Ваш сервис может иметь графический интерфейс. Просто ни один человек не увидит этого. Как следует из цитаты MSDN, сервис может отображать диалоговое окно. Звонок на MessageBox не удастся; он просто никогда не вернется - никто не будет нажимать на его кнопки.

Я не уверен, что вы имеете в виду, говоря о «управлении графическим интерфейсом». Вы действительно имеете в виду притворяться, что отправляете входные данные элементам управления, как с SendInput? Я не вижу причин, по которым это было бы невозможно; в конце концов, вы будете вводить данные в очередь вашей собственной программы, и 1006 * специфичные для Vista предупреждения *1007* ничего об этом не говорят. Но я думаю, что вы будете делать вещи намного сложнее, чем нужно. Пересмотрите идею изменить вашу программу, чтобы вообще не иметь пользовательского интерфейса. (Это не то же самое, что консольная программа. Консоли - это пользовательский интерфейс.)

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

0 голосов
/ 22 января 2009

Вы можете написать отдельный процесс, который предоставляет пользовательский интерфейс для вашего процесса обслуживания. Связь между вашим пользовательским интерфейсом и процессом обслуживания может осуществляться различными способами (поиск в Интернете для поиска «межпроцессного взаимодействия» или «IPC»).

...