Скрытый функционал сервера удалённых приложений в Windows 7
Функционал сервера удаленных рабочих столов (сервера терминалов) для клиентских операционных систем Windows появился еще с XP. Дело в том, что при тестировании Windows XP SP2 beta не было ограничений на использование удалённых рабочих столов. Именно с беты умные люди и выдернули необходимую библиотеку, благодаря чему XP SP2 приобрел функционал сервера терминалов. Ограничение на 10 одновременных подключений в XP также обошли путём патча библиотеки tcpip.sys. В итоге, получился достаточно «лёгкий» продукт, который многие используют до сих пор из-за своей простоты и малой ресурсоёмкости.
Ситуацию с удалёнными рабочими столами в Widows Vista рассматривать не будем. Ибо уже не актуально. На данный момент самой современной клиентской ОС является Widows 7. На ней и остановимся. Как повысить её функционал до многопользовательского сервера терминалов, думаю не стоит особо расказывать. Всё делается аналогично старой доброй XP, а именно заменой на пропатченный termsrv.dll. Об этом можно почитать в гугле. Информацию, откуда он появился для Windows 7 мне никто не предоставил. Но добившись функций сервера терминалов в семёрке, я продолжил исследования. Тем более, что аналогичное решение уже есть для windows xp — то использование «тяжелой» 7-ки для не совсем осмысленно.
Раз уж современные серверные ОС Windows Server 2008 и 2008 R2 позволяют предоставлять помимо обычных терминальных сессий еще и приложения сквозь бесшовный терминал (TS RemoteApp), то данный функционал явно присутствует в современной Windows 7. Приложение в терминале — вещь еще более интересная, чем удалённый десктоп. Зачем пользователю видеть удалённый рабочий стол, кнопки «Пуск» итд, тратить на это дополнительный трафик? А чтобы ограничить пользователя и урезать ему функционал — настраивать множественные групповые политики? Раз уж удалённому пользователю необходимо только приложение, то пусть оно откроется как обычное (как при запуске с его компьютера) и покажет только окно самой программы. Пользователю будед комфортно, а администратору спокойней. Полагаю, что непрофессионал (читай — девачка, которая ходит «фкантакти» и никогда не догадается, что жесткий диск — это винчестер) даже не отличит — разницу в том, терминальная ли это сессия или приложение запущено локально. Выдать может только медленная загрузка приложения (например, при низкой скорости соединения или загруженности сервера), но опять же данные вещи можно списать на «тормоза» компа или глюки виндус 🙂
В общем задача:
сделать из Windows 7 терминальный сервер удалённых приложений (Terminal Server RemoteApp) для доставки оных в любую точку земного шара пользователям стандартной Windows XP SP3.
Решение. Патчим termsrv.dll (подчеркну dll-ки разные на x86 и x64), создаем максимальное количество одновременных подключений. Проверяем работоспособность удалённого рабочего стола. Если всё ОК — переходим к активации функционала TS RemoteApp. Делается это — правкой одного(!) ключа реестра.
Открывает regedit, ищем «TSAppAllowList», в нём правим значение ключа с нуля на еденицу.
Теперь добавляем необходимое приложение, которое будед запускаться в бесшовном терминале. Создаём раздел внутри TSAppAllowList. Название произвольное. Внутри раздела прописываем имя приложения и путь к нему. Каждый раздел будед посвящен отдельному приложению. Возьмём для примера — стандартный виндовый калькулятор. В разделе создаём строковые параметры Name и Path. Полагаю, что их смысл понятен из приложенной ниже картинки. В некоторых англоязычных источниках предлагается в разделе TSAppAllowList создавать раздел Application, а уже в нём создавать разделы удалённых программ. Но в моём варианте всё и так заработало.
Всё! Windows 7 TS RemoteApp edition готов к боевым испытаниям! Осталось донастроить для данных целей Windows XP SP3 (не знаю у кого как, но у меня со всеми последними обновлениями, скачивающимися через встроенный автообновлятор). Так что если что-то незаработает — обновляйтесь. Возможно есть путь проще при помощи возможных визардов, но я делал следующим образом. Кстати, для Windows XP SP3 существует обновление для поддержки RemoteApp. Скачать его можно здесь (не забываем выбрать language вашей ОС), но у меня работало всё и без него.
Открываем в XP SP3 в Пуск => Программы => Стандартные = «Подключение к удалённому рабочему столу». Прописываем IP сервера (вашего псевдо TS RemoteApp на базе Windows 7), куда будем подключаться. Затем жмём внизу окна «Сохранить как».
Выбираем путь куда будем сохранять файл подключения *.RDP. Сохраняем. Идём туда, куда сохраняли — открываем блокнотом наш RDP-файл. Находим следующие значения (если таковые уже имеются — заменяем):
[code]remoteapplicationmode:i:1
remoteapplicationprogram:s:calc
disableremoteappcapscheck:i:1
alternate shell:s:rdpinit.exe[/code]
Замечу, что основной параметр приложения это «remoteapplicationprogram:s:» после него БЕЗ ПРОБЕЛОВ прописывается имя приложения или путь/имя приложения. Тут мои эксперименты продолжились. Для калькулятора можно прописать calc, calc.exe или C:windowssystem32calc.exe (путь в удалённой ОС). Я подставил вместо calc — Notepad (Блокнот) и на удивление всё заработало. Даже без прописывания в реестре Windows 7 приложений!!! Помните что такое «Переменные среды», чтобы не пытаться запустить без пути то, чего в «переменных средах» нет. То есть если вам нужно какое-то конкретное приложение, а не стандартное виндовое, то пишите полный путь к нему. Если приложение будет прописано в реестре Windows 7, а в параметрах RDP — только имя, то соответственно, если приложения не будет в «переменных средах», то будет выдана ошибка, что приложение не найдено и терминальная сессия закроется.
Еще одним правилом будет то, что у вас (вернее у того пользователя под которым вы зайдете в терминал) также должны быть права на запуск приложения и права на доступ к той директории, в которой находится данное приложение.
Итак… Запускаем наш «ярлык».
Удалённый сервер попросит Имя пользователя и Пароль. Вводим и подключаемся. Приложение в бесшовном терминале — доставлено.
Источник http://www.ultra54.ru