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