Есть несколько типов задач, которые программные роботы могут выполнить только при наличии активной графической сессии (т.е. не в фоновом режиме):
Если роботов запускают на машинах исполнения удаленно через приложение ROBIN Management Console (RMC), то проблем с выполнением таких задач не возникнет, т.к. там будет поднята графическая RDP-сессия. Однако если по каким-либо причинам запуск роботов планируется осуществлять вне RMC (вручную или по локальному расписанию) на удаленной машине, а окно с RDP-соединением пользователь не планирует оставлять в открытом виде, необходимо перевести текущую RDP-сессию в режиме console (консольный режим).
В консольном режиме графическая сессия остается активной, но при этом RDP-соединение закрыто и не мешает пользователю.
1. Запустить робота на удаленной машине. Если запуск предполагается производить по расписанию, настроенному на этой машине, то этот шаг можно пропустить.
2. Открыть cmd и выполнить команду query session. Необходим номер сессии (ID) у текущего пользователя:
Этот номер меняется при каждом новом подключении к машине, поэтому запоминать его для постоянного использования не имеет смысла.
3. Выполнить команду tscon.exe <ID> /dest:console
4. Результат: открытая сессия переведется в консольный режим, подключение к удаленному столу закрывается, а робот остается работать или будет запущен по расписанию в нужное время.
Выполнять самостоятельно все команды, которые описаны в первом способе, необязательно. Их точно также может выполнить и сам робот. Просто необходимо добавить в начало целевого алгоритма действия по исполнению этих команд через cmd.
Но перед запуском робота нужно перезапустить ROBIN Agent от имени администратора. Закрывать RDP-соединение самостоятельно не надо, необходимо дождаться, пока это сделает сам робот.
Чтобы каждый раз не открывать cmd и не вводить команды вручную, можно просто запускать заранее созданный bat-файл, в котором уже указаны необходимые команды. Запуск файл стоит производить также от имени администратора и только после выполнения шага №1 из первого способа.
ID сессии менять в файле не надо, его определение происходит автоматически.
Этот же bat-файл может запускать и сам робот, при помощи действия «Исполнить скрипт» (пример заполнения действия в схеме, приложенной выше). Но перед запуском робота нужно перезапустить ROBIN Agent от имени администратора. Закрывать RDP-соединение самостоятельно не надо, необходимо дождаться, пока это сделает сам робот.
В некоторых случаях, при переключении сессии может возникать ошибка "Не удалось подключить сеанс ID 1 к сеансу с именем console, код ошибки "1356". Ошибка: [1326]:Неверное имя пользователя и пароль.
Ошибка возникает, в следствии, ошибки Windows. Описание ошибки и способы решения описаны тут: https://support.microsoft.com/ru-ru/topic/%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%B8-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F-%D1%83%D1%87%D0%B5%D1%82%D0%BD%D0%BE%D0%B9-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0-%D0%B2-windows-1326-a238729e-4b79-b9e2-ebfa-2967c91ef5bf
При запуске и работе роботов в консольном режиме нужно учитывать также несколько особенностей:
tscon.exe <ID> /dest:console & <Путь до QRes.exe> /x:<Значение по X> /y:<Значение по Y>
где первая команда - это переход в консольную сессию, вторая - установка разрешения при помощи специализированной утилиты. Исходники утилиты здесь.
Но здесь следует учитывать, что на некоторых виртуальных средах после отключения RDP-соединения может не сохранятся то разрешение, с которым работал пользователь. В консольном режиме может происходить автоматическая установка того разрешения, с каким в последний раз заходили администраторы в консоль управления виртуальной средой.
Такая проблема, например, существует в виртуальных средах VMware. Предлагаемое решение описано по ссылке: VM Console Display Resolution Change - vGemba.net.
То есть необходимо:
а) войти на необходимую машину через консоль управления и поменять на машине разрешение на необходимое:
б) затем прописать в настройках виртуальной машины (через консоль управления) следующие параметры:
guestInfo.svga.wddm.modeset=”FALSE”
guestInfo.svga.wddm.modesetCCD=”FALSE”
guestInfo.svga.wddm.modesetLegacySingle=”FALSE”
guestInfo.svga.wddm.modesetLegacyMulti=”FALSE”
В таком режиме манипуляции с размером консоли VMware не влияют на разрешение, которое будет на машине в консольном режиме при работе робота.