• TS RemoteApp

    219663_aumentopoblacionДостаточно часто работа пользователя на терминальном сервере ограничивается запуском одного или нескольких приложений и не требует полноэкранной сессии. Технология Terminal Services RemoteApp (удаленные приложения) упрощает работу по такому сценарию. Удаленные приложения могут распространяться с помощью msi-пакетов и интегрироваться с локальной операционной системой. В частности, ярлыки этих приложений будут находиться в меню "Пуск" или на рабочем столе локального компьютера, а также использоваться при открытии ассоциированных с ними типов файлов.

    Системные требования

    Для использования технологии RemoteApp, клиент удаленного рабочего стола должен быть версии 6.0 или выше. В данный момент доступен клиент версии 7.0 для операционных систем: Windows XP, Windows Vista, Windows 2003/2008 Server. Установить его можно при помощи системы обновлений. В Windows 7 и Windows 2008 R2 он используется по умолчанию.

    Принцип работы

    В связи с необходимостью более полной интеграции с локальной системой, принцип работы удаленных приложений отличается от работы в полноэкранной сессии. Рассмотрим это более подробно (рис. 1). Информация позаимствована из Windows Server 2008 Terminal Services Resource Kit.

    StartRemoteApp

    Рис. 1. Схема запуска удаленного приложения

    1. Пользователь запускает клиент удаленного рабочего стола mstsc.exe и соединяется с сервером.
    2. Создается терминальная сессия. Открывается процесс Userinit.exe. Он стартует Rdpinit.exe, управляющий Rdpshell.exe. Rdpshell.exe – это оболочка, используемая при работе в удаленных приложениях вместо Windows Explorer (explorer.exe).
    3. Между клиентской и серверной составляющей устанавливается виртуальный канал. Он используется для передачи данных между сервером и клиентом.
    4. Rdpinit.exe проверяет список разрешенных для запуска приложений. Если приложение разрешено, терминальный сервер запускает его.
    5. Создается окно приложения.
    6. Rdpshell.exe взаимодействует с окном приложения и передает данные терминальному клиенту.
    7. Терминальный клиент создает окно, которое полностью идентично невидимому окну приложения на терминальном сервере. С этого момента пользователь может работать с приложением в обычном режиме.

    За корректное отображение удаленных приложений отвечают следующие серверные компоненты:

    • Rdpinit.exe,
    Rdpshell.exe,
    Rdpdll.dll.

    Rdpinit.exe – это аналог Userinit.exe. С его помощью запускаются логон-скрипты и создается оболочка пользователя. Rdpinit.exe отвечает за запуск Rdpshell.exe и обновление значков в панели уведомлений на стороне клиента через Rdpdd.dll. Кроме того, Rdpinit.exe управляет процессом завершения сеанса.

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

    Rdpdd.dll получает от Rdpinit.exe и Rdpshell.exe значки из панели уведомлений и обновляет их отображение на клиенте. Кроме того, Rdpdd.dll отслеживает изменения на стороне клиента и передает их приложению, запущенному на сервере.

    Со стороны клиента, ключевой технологией при работе с удаленными приложениями является RemoteApps Integrated Locally (RAIL). Это расширение RDP-протокола, позволяющее более полную интеграцию с рабочим столом пользователя.

    RAIL-клиент запускается на локальном компьютере пользователя и создает окно или значок оповещения для соответствующих им элементов приложения выполняемого на RAIL-сервере. Созданные окна\оповещения точно повторяют поведение окон\оповещений на терминальном сервере. Когда пользователь вводит какие-либо данные в Rail-окна\оповещения это захватывается RAIL-клиентом и передается на сервер. Аналогично данные передаются и в обратную сторону: все изменения отображения захватываются сервером и перенаправляются клиенту.

    Более подробно взаимодействие между отдельными компонентами терминальных служб рассмотрено в статье WS2008: Terminal Services RemoteApps.

    Установка и настройка
    Пошаговую инструкцию по установке и настройке RemoteApp можно найти на сайте Microsoft Technet.

    Здесь же остановимся на некоторых ключевых деталях настройки удаленных приложений.

    При настройке удаленных приложений в консоли TS RemoteApp Manager можно выбрать разрешен или запрещен запуск неопубликованных приложений (рис. 2).

    remoteapp1

    Рис. 2. Параметры настройки развертывания удаленных приложений

    Рассмотрим действие этой настройки на следующем примере.

    На терминальном сервере опубликован исключительно Microsoft Word и пользователь при работе в нем открывает гиперссылку, содержащуюся в документе. В зависимости от указанной настройки, он сможет или нет запустить Internet Explorer в той же терминальной сессии.

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

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

    При запуске удаленного приложения, вместо значка самого приложения отображается значок клиента удаленного рабочего стола. Для предоставления пользователю более полной информации о запускаемых приложений можно воспользоваться статьей How to make RemoteApp show the application icon when starting.

    При установке службы удаленных приложений на странице "Метод проверки подлинности" следует указать, каким образом будет проверяться клиент перед подключением. Если все клиенты используют операционные системы, поддерживающие протокол CredSSP (например, Windows 7 или Windows Vista), рекомендуется установить требование проверки на уровне сети. В противном случае рекомендуется выбрать параметр "Не требовать проверку подлинности на уровне сети".

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

    Удаленные приложения можно совмещать с технологией прозрачной авторизации Single Sign-On. В этом случае пользователю не нужно будет вводить пароль при первом запуске приложения.

    Для простоты распространения удаленных приложений можно использовать TS WebAccess. Это позволяет публиковать подготовленные rdp-файлы на корпоративном веб-сайте.

    Если пользователь с административными правами запускает удаленное приложение, то в его сессии вместе с приложением могут появиться Диспетчер Сервера и окно первоначальной настройки. Запретить это можно с помощью групповых политик

    Do not display Initial Configuration Tasks window automatically at logon,

    Do not display Server Manager automatically at logon,

    находящихся в разделе Computer Configuration\Administrative Templates\System\Server Manager.

    В русской версии операционной системы данные политики (рис. 3) называются

    Не отображать окно "Задачи начальной настройки" автоматически при входе,
    Не отображать диспетчер сервера автоматически при входе.

    remoteapp2

    Рис. 3. Групповые политики, отвечающие за отображение Диспетчера Сервера и окна первоначальной настройки

    Особенности использования

    При работе с удаленным приложениями важно учитывать, что пользователь не может самостоятельно завершить свой сеанс также как при работе с полноэкранным рабочим столом. В связи с этим, рекомендуется настроить своевременное отключение и завершение неиспользуемых сессий. Рассмотрим это более подробно.

    Сессия автоматически отключается когда все запущенные пользователем окна удаленных приложений и значки в панели уведомлений закрыты. Алгоритм принятия решения об отключении сессии приведен ниже (рис. 4).

    TerminateRemoteApp

    Рис. 4. Алгоритм отключения сессии

    Сессия удаленного приложения остается активной до тех пока существует хотя бы одно видимое или активное окно в этой сессии. Активное окно может быть в любом состоянии (развернутое, свернутое, восстановленное). Кроме того, удаленное приложение, которому принадлежит окно, может быть запущено как непосредственно пользователем, так и в результате работы с уже запущенным приложением. Рассмотрим это на следующем примере.

    Пользователь запускает удаленный Microsoft Outlook и открывает из него документ Microsoft Word, находившийся во вложении. Microsoft Word запускается в той же терминальной сессии отдельным удаленным приложением. Сессия будет оставаться активной до тех пор пока не закроются как Microsoft Outlook, так и Microsoft Word.

    Кроме того, сессия остается активной до тех пор пока, в панели уведомлений находится как минимум один значок удаленного приложения запущенного пользователем. Рассмотрим это на следующих примерах.

    Пользователь запускает удаленный Microsoft Office Communicator. После открытия приложения в панели уведомлений появляется значок приложения. Он остается там даже если закрыть главное окно приложения. Соответственно, сессия также будет оставаться активной.

    Однако, это справедливо не для всех случаев. Если пользователь открывает удаленный Microsoft Outlook вместе с ним может запуститься клиент антивируса, создающий свой значок в панели уведомления. Если закрыть окно Microsoft Outlook, значок антивируса будет игнорироваться при решении об отключении сессии, т.к. это приложение не было запущено пользователем.

    В случае если выявлено, что в сессии нет запущенных удаленных приложений, следует 20-ти секундная пауза. В течении её пользователь может запустить другое удаленное приложение на том же самом сервере. Если приложений не запущенно в течении этого периода, сессия будет отключена.

    Открытие отключенной сессии происходит гораздо быстрее чем создание новой. По умолчанию, сессии RemoteApp могут бесконечно оставаться в отключенном состоянии. Для более рационального использования ресурсов сервера, можно определить интервал ожидания перед автоматическим завершением отключенных сессий.

    Сделать это можно с помощью политики «Set time limit for logoff of RemoteApp sessions», находящейся в разделе

    Computer Configuration\Administrative Templates\Windows Components\Terminal Services\Terminal Server\Session Time Limits

    В русскоязычных версиях операционной системы данная политика называется «Задать предел времени для выхода из сеансов RemoteApp» (рис. 5).

    gp_ra

    Рис. 5. Настройка ограничения по времени терминальных сессий

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

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

    Для устранения этой проблемы можно ограничить права пользователей удаленных приложений и запретить им использование полноэкранного рабочего стола. Сделать это можно следующим образом.

    1. Создать организационную единицу в оснастке Active Directory Users and Computers
    2. Переместить туда терминальный сервер
    3. Создать объект групповой политики и связать его с созданной ранее организационной единицей
    4. Создать группу безопасности. Включить в неё терминальный сервер и пользователей, которым запрещен доступ к полноэкранному рабочему столу
    5. В фильтрах безопасности объекта групповой политики удалить группу Authenticated users и добавить созданную ранее группу.
    6. В групповой политике установить следующие настройки:
    7. Computer Configuration\Policies\Administrative Templates\System\Group Policy\User Group Policy loopback processing modeEnabled , mode – Merge
    8. User Configuration\Policies\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection%systemroot%\system32\logoff.exe
    9. Обновить групповые политики командой: gpupdate /force

    В результате, полноэкранные сеансы пользователей удаленных приложений будут завершаться сразу же после установки соединения.

    Дополнительные ресурсы

    Using Terminal Services RemoteApp™ programs on multi-monitor client computers

    Terminal Services RemoteApp Session Termination Logic

    WS2008: Terminal Services RemoteApps

    Remote Desktop Protocol: Remote Programs Virtual Channel Extension

    Working With Terminal Services Remote Applications

Комментарии

  1. Будьте внимательны! Ограничение одной сессией на RemoteApp не распространяется.
    Оно живёт в отдельной сессии. Если юзер запустит опубликованную программу, и в тоже врнмя зайдёт в обычный терминал с целью запуска той же программы – на сервере будет запущено два экземпляра этой программы. (например известной желтой, которая проверяет кл-во запущенных по ключу HASP)

  2. Спасибо за дополнение. Я к сожалению только косвенно об этом упомянул.
    “Внедрение удаленных приложений может привести к увеличению нагрузки на терминальные сервера из-за того, что пользователи будут использовать их параллельно с полноэкранным удаленным рабочим столом. Даже если на сервере выставлено ограничение пользователя одной терминальной сессией, это не будет действовать при использовании удаленных приложений. Другими словами пользователю будет разрешено параллельно открыть как полноэкранный рабочий стол, так и удаленное приложение.”

  3. Будьте внимательны! Модальные окна – яркий пример 1С 8.1 и 8.2 – могут терять фокус при работе в режиме RemoteApp.

  4. Будьте внимательны! Ограничение одной сессией на RemoteApp не распространяется.

    Согласен. Но я решил эту проблему закрытием рабочего стола и пуск через gpedit.msc. Сам пользую ИС ПРО в терминальном режиме плюс ко всему в самой программе организованна функция деления по станциям Это то же не дает запускать сразу несколько копий.

  5. Господа обратите внимание, что функция удаленного управления сессией пользователя(remote control) в RemoteApp существует, но глючит и официально не поддерживается!!!

  6. А у меня, если вывести на печать любой документ в 1С 7.7 запущенной в режиме RemoteApp, то после закрытия 1С окно RemoteApp останется открытым. Посмотрел процессы сессии и понял, что это из-за сервиса splwowx64.exe, который не завершает работу. В чем может быть причина? Драйвер принтера не должен быть причиной, т. к. проверял на 8 принтерах различных производителей в сети. Ситуация аналогична.

  7. Нашел ответ. Причина в долгом завершении работы splwow64.exe. У меня таже проблема. Если 1С в режиме RemoteApp запустить, поработать и закрыть не вызывая диалоги связанные с принтером (предварительный просмотр перед печатью, печать, настройка параметров страницы), то сессия тут-же закроется. А, если все-же открыть диалог связанный с принтером, например распечатать что-либо, то будет автоматически запущен процесс splwow64.exe. В общем на иностранных форумах пишут следующие правки реестра, чтобы этот сервис сразу завершал свою работу после распечатки.

    HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Print
    Создать новый DWORD 32bit с именем SplWOW64TimeOut и установить его на 1 минуту (в десятичной системе 1).

    HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Terminal Server SysProcs
    Создать новый DWORD 32bit с именем splwow64.exe и установить его в десятичное значение 0.

    Сессии закрываются махом. Слава шаманскому бубну!

  8. Господа, такой вопрос!
    Собираюсь организовать на сервере 2008R2 сервер 1С 7.7(файловая,сетевая). Все пользователи будут получать доступ к ней по RemoteApp. Предварительная работа по организации доступа уже проделана. Но не совсем понятно!
    Зачем ставить драйвера принтера на сервер, если в RemoteApp уже организована работа принтеров без требований установки дров?
    Тут рассматривается требование по клиентской части, то есть нет.фреймворк не ниже 3.1 (желательно 3.5) и клиент РДП не ниже 6.1.
    Я проверил, печать и с МС Офиса и с самой 1С, проходит корректно. При открытии сессии подхватываются установленные принтера клиента.
    Так зачем ставить драйвера принтеров на сервер терминалов?

  9. Если печать через Easy Print работает корректно и клиенты поддерживают данную технологию, то устанавливать драйвера не обязательно

  10. Спасибо Дмитрий за ответ! Я за одно и статейку здесь по этой технологии печати нашел. Отличный сайт! Спасибо! Самое оно при развёртывании новых систем!
    А вот если была практика с терминальными сервисами в 2008R2, значительно облегчает нагрузку сервера, технология Easy Print?
    И ещё интересен факт по трафику в сети. Просто канал между подразделениемя 512 Кбс на кучу пользователей? Стоит ли ставить сервер печати сразу?
    Заранее благодарен за ответ!

  11. По моему опыту, Easy Print значительно повышает стабильность сервера из-за отсутствия сбоев с принт-спулером. Производительность же обычно больше зависит от приложений, которые выполняются на терминальном сервере.
    По трафику встречаются разные мнения. По моим опытам, трафик при печати снижается и она происходит быстрей. Однако, приходилось слышать отзывы о значительном росте трафика при печати после перехода на Easy Print. Например,недавно попалось на форумах TechNet:
    http://social.technet.microsoft.com/Forums/ru-RU/ws2008ru/thread/48c38e22-f273-4285-89bf-6af0518c8c60

  12. Так как-нибудь можно побороть глюк с удаленным управление в RemoteApp? А то после перехвата управления у пользователя приложение вылетает, хотя на сервере сессия остается….

  13. Одна из проблем в использовании технологии “Easy Print” – это сравнительно замедленная скорость печати, в отличии от установки драйверов и выбора сетевого принтера. С понедельника буду запускать в массу работу терминала с 1С 7.7. Посмотрим что там будет! На тестах ошибок печати не было, просто скорость печати вдвое упала….

  14. Алексей, спасибо за splwow64!
    2003R264 минуты 2 наверно выходил из сеанса, теперь все ОК

  15. У нас такая проблема если вывести на печать любой документ в 1С 7.7 запущенной в режиме RemoteApp, то ни чего не происходит а когда поселаеш через фаил то говорит что не установленно не одного принтера и РПЦ не доступен

  16. У меня еще одна проблема, почти как у Сергея. Сервер 2008R2x64, 1сv8 в режиме RemoteApp. При попытке печати документа не открывается диалоговое оно выбора принтера, так же не работает комбинация Ctrl+Shift+P. Но если зайти под этим же юзером в обычную терминальную сессию, и оттуда запустить 1С, то все работает замечательно. Для перенаправления принтера используется ScrewDriver последней версии… Может кто подскажет, куда копать?

  17. Хммм.интересный метод ограничения доступа к рабочим столам.. А не проще просто в настройках пользователей добавить logoff.exe на запуск при входе? тогда не придется лазать в политики, менять, прописывать, ипацца…А удаленные приложения будут работаьть как ни в чем не бывало

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

    Сделали таймаут отключеным, но это как-то не вариант. Один глюк в сети и все данные проматали 🙁

    http://www.ca22.ru/blog/?p=5

  19. А кто-нибудь знает, как можно закрыть доступ к файловой системе, на которой установлено удаленное приложение для клиентской машины?