четверг, 23 сентября 2010 г.

Использование функции RemoteApp for Hyper-V для работы с устаревшими приложениями

С выходом Windows Server 2008 (Terminal Services, ныне Remote Desktop Services) у пользователей появилась возможность подключаться не только к удаленному рабочем столу, но и к отдельным опубликованным приложениям (RemoteApp или т.н. Seamless Mode). Данный режим существенно облегчает работу, позволяя перенести выполнение большинства приложений на терминальный сервер прозрачно для пользователей.

Тем не менее, во многих организациях до сих пор используются различные устаревшие приложения, которые не могут выполняться на ОС Windows Server 2008 и выше, что может препятствовать переходу на новые ОС. Данную проблему можно решить различными способами, например, используя решения сторонних производителей (например, Citrix XenApp) или запуская виртуальную машину на локальной рабочей станции пользователя (Windows XP Mode или MED-V), однако есть и другой вариант.

Для клиентских ОС существует возможность публикации отдельных приложений с организацией удаленного доступа к ним по протоколу RDP (RemoteApp for Hyper-V).

Как и в классическом варианте терминального доступа в режиме RemoteApp for Hyper-V существует хост - виртуальная машина с установленными приложениями, к котором требуется обеспечить удаленный доступ и клиент - устройство, за которым работает пользователь.

Microsoft предоставляет на выбор два сценария публикации:
  • В Standalone режиме администратор создает .rdp файл, в котором указывает название приложения и имя хоста, к которому планирует подключаться один или несколько пользователь. Для каждого публикуемого приложения должен быть создан отдельный .rdp файл. Кроме того, в силу ограничений клиентских ОС, на хосте может быть активной лишь одна пользовательская сессия, иными словами, только один пользователь сможет получить доступ к опубликованным приложениям на данном хосте. Хотя данный вариант не требует установки дополнительных служб и компонентов, но может быть сложен в управлении и обслуживании при наличии большого количества хостов и публикуемых приложений.
  • VDI конфигурация предполагает развертывание полноценной инфраструктуры виртуализации рабочих станций на базе сервера виртуализации Hyper-V, Remote Desktop Session Host и Connection Broker из состава Windows Server 2008 R2. Данный вариант обеспечивает единую точку подключения ко всем публикуемым приложениям, отслеживает активные сеансы пользователей, дабы избежать одновременного подключения сразу к нескольким хостам, однако не избавляет администраторов от необходимости создавать .rdp файлы и выполнять настройку виртуальных машин.
В качестве хостовой ОС для публикации приложений поддерживаются следующие ОС:
  • Windows XP x32 Professional SP3;
  • Windows Vista x32 SP1 или выше в редакции Enterprise или Ultimate;
  • Windows 7 x32 в редакции Enterprise или Ultimate.
В Windows 7 данный функционал поддерживается по умолчанию, а для Windows XP и Windows Vista придется загрузить дополнительное обновление (отсюда и отсюда, соответственно).

В качестве клиентской ОС с которой выполняются подключения, поддерживается Windows 7 x32 или x64 (однако, в роли клиентов также могут выступать Windows XP и Windows Vista с установленным клиентом RDP Client 7.0).

Публикация приложений
В качестве примера рассмотрим вариант публикации одного или нескольких стандартных приложений из состава Windows XP.

Перед тем, как переходить к самой процедуре настройки хостовой машины, вам потребуется установить актуальную версию клиента RDP (RDP Client 7.0) для соответствующей версии ОС и обновление, включающее функционал RemoteApp for Hyper-V (ссылки приведены выше). После установки обновления на компьютер потребуется его перезагрузить.

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

Откройте редактор реестра (regedit) на хостеовой машине и измените параметр fDisabledAllowList расположенный в HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList, установив его значение в 1.

Запустите клиент RDP, укажите имя хоста, к которому требуется подключиться, и сохраните файл конфигурации (.rdp), нажав Save As.

Откройте созданный файл в текстовом редакторе, найдите строчки и замените их значения на приведенные ниже:
Alternate shell:s:rdpinit.exe
RemoteApplicationMode:i:1

Добавьте в файл следующие строчки:
RemoteApplicationName:s:<ИМЯ_ПРИЛОЖЕНИЯ>
RemoteApplicationProgram:s:<ПУТЬ_К_ФАЙЛУ>
DisableRemoteAppCapsCheck:i:1
Prompt For Credentials on Client:i:1
, где <ИМЯ_ПРИЛОЖЕНИЯ> - описательное имя приложения (например, Notepad);
<ПУТЬ_К_ФАЙЛУ> - полный путь к исполняемому файлу приложения (например, "C:\Windows\System32\Notepad.exe").

Пример модифицированного файла показан на рисунке:

Сохраните файл и перенесите его на клиентский компьютер.

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

Учтите, что если вы планируете использовать один и тот же хост для подключения нескольких пользователей поочередно, то крайне желательно настроить автоматическое завершение сеанса после отключения пользователя. Сделать это можно отредактировав групповые политики хоста (через локальные или доменные групповые политики). Интересующая Set time limit for disconnected sessions настройка находится:
Для Windows XP: Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Sessions
Для Windows Vista: Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Terminal Server -> Session Time Limits
Для Windows 7: Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Session Time Limits
Установите значение параметра в Enable и укажите интервал отключения через 1 минуту.

При подготовке статьи использовались следующие материалы:
  1. RemoteApp for Hyper-V (VDI) Deployment.

10 комментариев:

  1. при такой схеме сессия будет консольная ? или rdp-шная ?

    ОтветитьУдалить
    Ответы
    1. Насколько я помню, при подключении к клиентским ОС используется консольная сессия, а не терминальная.

      Удалить
  2. Подскажите, после того, как пользователь поработал и закрыл приложение, сессия остается активной (сервер Windows 7x64 Ult). Как сделать так, чтобы она завершалась (или хотя бы отключалась)? Заранее, спасибо.

    ОтветитьУдалить
  3. А вы пробовали настроить политику Set time limit for disconnected sessions, описанную в конце статьи?

    ОтветитьУдалить
  4. Да, пробовал. Но эта функция завершает отключенные сеансы, а у меня они остаются активными после закрытия приложения на клиентском компьютере. Не могу найти решение!
    Пробовал 2-й вариант (не через Remoteapp), когда в RDP ставишь галочку "при подключении запускать следующую программу", но почему-то заходит на рабочий стол, а не в программу. Если сервер на ХР, то эта галочка работает отлично, если на W7 - нет. В интернете посмотрел, эта проблема существует, но решения не нашел. Поэтому и пришлось посмотреть в сторону Remoteapp. Однако здесь - проблема с завершением сеанса.
    Если сможете, помогите, пожалуйста!

    ОтветитьУдалить
    Ответы
    1. Попробовал на стенде с парой простых приложений вроде Notepad и Calc. В Windows 7 x64 политика Set time limit for disconnected sessions отрабатывает корректно. После закрытия приложения через несколько секунд сессия переходит в состояние Disconnected, а через указанное в политике время завершается. Сессии на машине смотрел удаленно с сервера помощью команды quser.

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

      Удалить
    2. Да, Вы правы.После закрытия приложения висит антивирус касперского. Если его отключить на сервере, то после закрытия приложения сеанс отключается, а потом завершается (т.к. выставил 1 мин.). Все хорошо, но как теперь Касперского заставить работать только в одном сеансе, куда не заходят удаленно?

      Удалить
    3. В итоге разобрался. Приложение добавил в исключения в Касперском и все работает как надо. Спасибо за помощь!

      Удалить
    4. Странно, все было нормально. Опять висит касперский после закрытия приложения, хотя добавлено приложение в исключения.Ничего не пойму. Может еще что-то нужно добавить в исключения?

      Удалить
  5. Сколько одновременных пользователей может быть? И какое количество программ может быть запущено от ожного пользователя? Genialen@mail.ru Если не трудно. Спасибо.

    ОтветитьУдалить