При использовании платформы 1С:Предприятие 7.7 в среде публикаций RemoteApp на операционных системах Windows Server 2016 и новее системные администраторы часто сталкиваются с нестабильным отображением интерфейса. Главное меню программы переносит отрисовку за главное окно приложения, из-за чего пункты меню визуально исчезают, хотя продолжают реагировать на нажатия клавиш и клики мышью. Кроме того, на этапе инициализации глобального модуля окно приложения может замораживаться до принудительного сворачивания или разворачивания.
Рассмотрим подробно причины возникновения этой неисправности, а также разберем проверенные способы устранения сбоев отрисовки окон в терминальном режиме.
Проанализируем техническую сторону взаимодействия устаревшего приложения Win32 с современным стеком Remote Desktop Services:
RAIL (Remote Applications Integrated Locally). Каждый элемент интерфейса (меню, диалоги, выпадающие списки) создается сервером как отдельный дескриптор окна HWND. Оконный менеджер DWM (Desktop Window Manager) на современном сервере не всегда корректно синхронизирует так называемый Z-порядок (порядок наложения окон по глубине) для приложений, написанных на старых версиях библиотеки MFC 4.2. Из-за этого дочернее окно главного меню теряет фокус и перемещается за родительское окно 1С.ПриНачалеРаботыСистемы глобального модуля) поток 1С 7.7 временно перестает перехватывать системные сообщения PeekMessage и GetMessage. Операционная система Windows Server определяет окно как зависшее и создаёт поверх него подменяющее окно-призрак (Ghost Window). После возврата управления реальному окну порядок слоев нарушается, а графический поток прекращает обновление экрана до принудительного изменения размера окна.RemoteFX могут вызывать рассинхронизацию пакетов перерисовки между клиентом и сервером.Самым надежным способом обойти ограничение стека RAIL является переключение подключения из режима бесшовного окна в стандартный режим с отображением рабочего стола сеанса или отдельного окна сессии.
Разберем по шагам, как отредактировать конфигурационный файл подключения .rdp:
.rdp в любом текстовом редакторе (например, Блокноте).remoteapplicationmode и изменим её значение на 0:
remoteapplicationmode:i:0
При таком значении клиент RDP запускает сессию без разделения окон на индивидуальные дескрипторы HWND, что полностью исключает путаницу в Z-порядке слоев меню.
Если необходимо сохранить работу пользователей именно через RemoteApp, проанализируем настройки групповых политик (GPO) на сервере сборок. Изменение транспорта устраняет большинство задержек перерисовки.
gpedit.msc.gpupdate /force в командной строке.Рассмотрим вариант включения режима совместимости исполняемого файла платформы 1С 7.7. Это заставляет операционную систему применять классическую схему обработки событий интерфейса.
C:\Program Files (x86)\1Cv77\BIN\).1cv7.exe или 1cv7s.exe и откроем Свойства.Важная деталь: При включении режима совместимости необходимо протестировать работу используемых внешних компонентов (v7plus.dll, компоненты прямого доступа к БД, внешние библиотеки для работы с торговым оборудованием). Некоторое драйверы оборудования и ВК могут некорректно обрабатывать системные вызовы в режиме совместимости.
Лишние модальные окна, появляющиеся при старте приложения, сбивают корректный фокус основного окна программы еще до загрузки интерфейса конфигурации. Для предотвращения сбоя выполним отсечение стартовых окон:
BIN платформы 1С 7.7.1cv7Cnfg.tip и 1cv7Main.tip.[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options\TipOfTheDay] установим значение ключа ShowInStart равным 0.В случаях, когда встроенные средства RemoteApp Windows Server 2016 не позволяют добиться стабильного результата при работе с 1С 7.7, проанализируем использование сторонних решения для публикации бесшовных окон: