Что нового

Вывод GUI в другой сеанс

A

amee

Гость
Коллеги. Столкнулся с проблемой вывода GUI приложения.
Ситуация такова:
Есть nncron lite, который запускается как служба (Ну тут не имеет это пока значения. Важно Что от имени службы.). Служба запускается от имени одного из локальных администраторов. (хотя тут не важно от имени кого). Так вот крон по заданию времени запускает приложения, в том числе написанные в AUTOIT.
Проблема в том, что у всех приложений не видно GUI , потому что он не имеет вывода как WindowStation-объект WinSta0.. Тоесть процесс есть, а взаимодействовать с пользователем оно не может.

Независимо от того, работает ли сервис под учетной записью пользователя или под учетными записями Local System, Local Service либо Network Service, он не может получать пользовательский ввод или выводить окна на консоль, если он не сопоставлен с видимым объектом WindowStation. Фактически, если бы сервис попытался вывести обычное диалоговое окно, он бы казался зависшим, так как ни один пользователь не увидел бы это окно и не смог бы его закрыть с помощью мыши или клавиатуры. (Единственное исключение - вызов MessageBoxсо специальным флагом MB_SERVICE_NOTIFICATION или MB_DEFAULT_DESKTOP_ONLY. При MB_SERVICE_NOTIFICATION окно всегда выводится через интерактивный объект WindowStation, даже если сервис не сконфигурирован на взаимодействие с пользователем, а при MB_DEFAULT_DESKTOP_ONLY окно показывается на рабочем столе по умолчанию интерактивного объекта WindowStation.)

Иногда, хоть и очень редко, сервису нужно взаимодействовать с пользователем через информационные или диалоговые окна. Чтобы предоставить сервису право на взаимодействие с пользователем, в параметр Туре в разделе реестра данного сервиса следует добавить модификатор SERVICE_INTERACTIVE_PROCESS. (Учтите, что сервисы, сконфигурированные для работы под учетной записью пользователя, нельзя помечать как интерактивные.) B случае сервиса, помеченного как интерактивный, SCM запускает его процесс в контексте защиты учетной записи Local System, но сопоставляет сервис с WinStaO, а не с неинтерактивным объектом WindowStation. Это позволяет сервису выводить на консоль окна и реагировать на ввод пользователя.


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

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
amee
В PSEXEC.EXE тоже программы запускаются без взаимодействия с пользователем, но можно задать ключ в командной строке -i, и запускаемая программа становится интерактивной... Возможно, что-то подобное есть и в nnCron...

Русская справка
Может быть, поможет опция ShowNormal?
 
Автор
A

amee

Гость
PSEXEC не годится. Там надо знать логин и пароль пользователя, кому запускаешь программу.
SHOWNORMAL - кмк тут вообще ни при чём. Ведь тут изначально окно есть и оно нормальное. Ему просто не переданы параметры Window session.
 
Автор
A

amee

Гость
Так тема до сих в тупике.... :stars:
 
Верх