Создать графический интерфейс из службы Windows с сетевым входом - PullRequest
3 голосов
/ 12 февраля 2009

Я много читал о выполнении приложения с графическим интерфейсом из службы Windows. Флажок «Разрешить службе взаимодействовать с рабочим столом» работал для меня, когда служба запускается как пользователь SYSTEM (я использую Windows XP). Теперь мне нужно, чтобы служба работала как пользователь, определенный в домене (из сети). Все работает нормально (даже если в систему не вошел ни один пользователь), но графический интерфейс пользователя не отображается (даже если в систему вошел один и тот же пользователь сети!) Я знаю, что GUI работают, просто они скрыты. Это почему? Есть ли способ показать их, если пользователь вошел в систему (например, когда пользователь SYSTEM создан и разрешено взаимодействие с рабочим столом!)? если так, будет ли это работать, если пользователь, вошедший в систему, отличается от того, на котором работает служба?


Edit:

@ casperOne: Я вижу ваше решение, и это то же самое, что люди (даже вы) публикуют вокруг. Однако в моем случае я уверен, что работаю в защищенной среде, и ТОЛЬКО один пользователь будет одновременно подключен к машине. Есть ли что-нибудь, что можно сделать, чтобы просто показать GUI? Почему это работает с пользователем SYSTEM, позволяющим взаимодействовать с рабочим столом, а не с другим пользователем?

Ответы [ 3 ]

7 голосов
/ 12 февраля 2009

Ваш подход полностью неверен и не будет работать при развертывании в Vista.

Сервисы НИКОГДА не должны вступать в сеанс входа в систему с рабочим столом для взаимодействия.

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

См. Этот другой вопрос (и ответы) для получения дополнительной информации:

Как определить, можно ли открыть окно?

0 голосов
/ 20 февраля 2009

И даже в XP он не работал на компьютерах, не подключенных к домену (если у вас есть несколько пользователей, использующих быстрое переключение пользователей, всплывающие окна показывались либо на неправильном рабочем столе, либо вообще не на рабочем столе).

Что касается того, почему Microsoft изменила это, выполните быстрый поиск «Shatter Attack» - изолировав служебный код от настольного компьютера, они полностью отключили все это семейство уязвимостей безопасности.

0 голосов
/ 13 февраля 2009

Краткий ответ: Нет, вы не можете сделать это

Длинный ответ: Неееееет.

По сути, Microsoft вносит изменения, чтобы предотвратить это. Как заявило casperOne, вам нужно отделить компоненты пользовательского интерфейса от службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...