Объяснение бесшовного применения

Опубликовано: 24 Апреля, 2023

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


Введение


Запуск бесшовных приложений был представлен в Metaframe 1.8 и с тех пор пользуется большой популярностью. Это наименее запутанный способ для конечного пользователя работать с приложением в сеансе citrix, поскольку он/она не видит разницы между приложением citrix и его/ее локальным приложением. Способ развертывания приложения Citrix по умолчанию долгое время оставался незаметным. Как бы просто ни звучало бесшовное, технология, лежащая в его основе, не всегда так проста и может вызвать проблемы, связанные с безупречной работой всех ваших приложений в бесшовном режиме.


Технология


Технология бесшовного приложения в основном скрывает часть окна, в которой отображается приложение в обычной оболочке Windows.


Например, при открытии медиаплеера на локальном компьютере XP в режиме скина это будет выглядеть так:



Однако, если вы наведете указатель мыши на верхнюю часть медиаплеера, появится фактическая оболочка окна, в которой запущено приложение, но которая не была видна:



Части, которые не должны были быть видны, такие как секция кнопки min/max/close, строка заголовка и т. д., были сделаны невидимыми с использованием той же технологии. Citrix использует эту технологию для всех приложений, чтобы придать им бесшовный вид.


Основным движком этой технологии является wfshell.exe (тот самый движок, который вызывает проблемы с принтером при сбое и использовался до Citrix MPS 3.0). Все настройки, используемые wfshell.exe, хранятся в HKLMSYSTEMCurrentControlSetControlCitrixwfshell.


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


Разбить окно


Как я сказал выше, окно состоит из более мелких частей, даже если оно выглядит для конечного пользователя как одно окно, как, например, открытие notepad.exe.


Придерживаясь блокнота в качестве примера, это будет означать, что окно, показывающее блокнот, называется «Родительским окном». Если вы введете некоторые фиктивные данные и закроете их, вы получите всплывающее окно с вопросом, хотите ли вы сохранить данные. Это всплывающее окно считается «дочерним окном». Поскольку блокнот — очень простое приложение, вы можете быть уверены, что более сложные приложения могут иметь много дочерних окон. При уничтожении родительского окна дочерние окна уничтожаются автоматически. Если их не убивать, они становятся сиротами, и после этого их нужно убивать. (вернемся к этому позже)


Возвращаясь к окну сообщения блокнота, это так называемое «модальное окно». Существует 2 типа;



  1. Applmodal (что означает, что вы не можете использовать другое окно из этого приложения, пока не ответите)
  2. Systemmodal (что означает, что вы не получите доступ к системе, пока не ответите)

Пример блокнота — applmodal; просто попробуйте сами.


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


Другой пример — родительское окно, создающее невидимое дочернее окно. Бесшовный движок его не определяет, а при сворачивании приложения в панель задач оно просто пропадает. Это те же Delphi и vb, которые известны созданием таких окон.


Ключ реестра для решения этой проблемы:



[HKEY_LOCAL_MACHINESystemCurrentControlSetControlCitrixwfshellTWITApplication]
Имя значения: ClassName
Тип значения: REG_SZ
Значение: TApplication
Имя значения: Тип
Тип значения: REG_DWORD
Значение: 0x00000016


Что может быть сделано


Citrix создала ключи реестра для решения этой проблемы, примером которой является приведенный выше. Они делятся на 2 типа:



  • Флаг глобального реестра. Они влияют на все бесшовные приложения на сервере.
  • Специфичные для окна флаги реестра. Они влияют на поведение окна из приложения. Эти типы ключей являются наиболее сложными и требуют, чтобы вы знали имя класса такого окна. Чтобы узнать имя класса, вам понадобится такой инструмент, как spy++ или wspector. (spy++ принадлежит Microsoft Visual Studio и не является бесплатным, в то время как wинспекция является бесплатным)

Citrix создал несколько статей kb по этому вопросу, которые являются обязательными для чтения, когда речь идет об устранении неполадок такого рода. Первый документ представляет собой полный список известных бесшовных флагов исключений: http://support.citrix.com/article/CTX101644. Второй документ представляет собой краткое руководство о том, как использовать spy++ для поиска имени класса окна: http://support.citrix.com/article/CTX103137.



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


При наведении указателя мыши на приложение в ячейке класса wspector появится имя класса вашего приложения.)



Вы можете найти копию Wspector здесь.


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


Например, чтобы использовать флаги 0x1 и 0x200: значение для SeamlessFlags будет 0x1 + 0x200 = 0x201.


Или, если вы хотите использовать флаги 0x1, 0x200 и 0x400, тогда: Значение для SeamlessFlags будет 0x001+0x200+0x400 = 0x601.


Выяснение того, в чем конкретно заключается ваша проблема с окном и какой точный флаг требуется (или комбинация флагов, даже смешанные глобальные и оконные флаги), может занять очень много времени и быть сложным. Если у вас есть контракт на поддержку Citrix, возможно, стоит позвонить в службу поддержки Citrix, поскольку они решают такие проблемы гораздо чаще, чем вы.


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


Плохое приложение


Когда бесшовное приложение закрывается со стороны клиента, пользователь больше не видит приложение. Однако может случиться так, что не каждый процесс, принадлежащий этому бесшовному приложению, будет корректно закрыт. (Из-за запуска дополнительного процесса из основного приложения, либо сбоя в движке wfshell). Это может привести к тому, что процесс не будет закрыт, а сеанс останется открытым в фоновом режиме, что вызовет всевозможные проблемы, поскольку процесс потребляет ненужные ресурсы. Вы можете найти эти призрачные процессы, открыв консоль управления Citrix, перейдя к свойствам не полностью закрытого сеанса и завершая процессы из этого сеанса один за другим, пока не получите плавный выход из системы и, таким образом, не найдете плохое приложение. (Назовем плохое приложение badapp.exe)


Чтобы решить эту проблему, Citrix создал раздел реестра, который, как мне кажется, сейчас является одним из наиболее часто используемых, но я все равно упомяну его:



[HKEY_LOCAL_MACHINESystemCurrentControlSetControlCitrixwfshellTWI]
Имя значения: Логоффчекксмодулес
Тип значения: REG_SZ
Значение: BadApp.exe


Если вам случится столкнуться с несколькими плохими процессами, вы можете добавить их к одному и тому же ключу, используя запятую и без пробелов: app1.exe, app2.exe, app3.exe и т. д.


Подробную статью об этом можно найти здесь.


Вывод


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