Почему главное меню 1С 7.7 отрисовывается за главным окном в RemoteApp и как это исправить?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

При использовании платформы 1С:Предприятие 7.7 в среде публикаций RemoteApp на операционных системах Windows Server 2016 и новее системные администраторы часто сталкиваются с нестабильным отображением интерфейса. Главное меню программы переносит отрисовку за главное окно приложения, из-за чего пункты меню визуально исчезают, хотя продолжают реагировать на нажатия клавиш и клики мышью. Кроме того, на этапе инициализации глобального модуля окно приложения может замораживаться до принудительного сворачивания или разворачивания.

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

Причины сбоев перерисовки окон 1С 7.7 в RemoteApp

Проанализируем техническую сторону взаимодействия устаревшего приложения Win32 с современным стеком Remote Desktop Services:

  1. Специфика протокола RAIL и менеджера DWM: В режиме RemoteApp работа с окнами осуществляется через механизм RAIL (Remote Applications Integrated Locally). Каждый элемент интерфейса (меню, диалоги, выпадающие списки) создается сервером как отдельный дескриптор окна HWND. Оконный менеджер DWM (Desktop Window Manager) на современном сервере не всегда корректно синхронизирует так называемый Z-порядок (порядок наложения окон по глубине) для приложений, написанных на старых версиях библиотеки MFC 4.2. Из-за этого дочернее окно главного меню теряет фокус и перемещается за родительское окно 1С.
  2. Механизм Window Ghosting: Во время длительной обработки кода при старте (в процедуре ПриНачалеРаботыСистемы глобального модуля) поток 1С 7.7 временно перестает перехватывать системные сообщения PeekMessage и GetMessage. Операционная система Windows Server определяет окно как зависшее и создаёт поверх него подменяющее окно-призрак (Ghost Window). После возврата управления реальному окну порядок слоев нарушается, а графический поток прекращает обновление экрана до принудительного изменения размера окна.
  3. Особенности RDP-транспорта и графических ускорителей: Использование сетевого протокола UDP по умолчанию и активное аппаратное ускорение RemoteFX могут вызывать рассинхронизацию пакетов перерисовки между клиентом и сервером.

Способ 1. Отключение бесшовного режима RemoteApp (remoteapplicationmode:i:0)

Самым надежным способом обойти ограничение стека RAIL является переключение подключения из режима бесшовного окна в стандартный режим с отображением рабочего стола сеанса или отдельного окна сессии.

Разберем по шагам, как отредактировать конфигурационный файл подключения .rdp:

  1. Откроем используемый файл .rdp в любом текстовом редакторе (например, Блокноте).
  2. Найдем строку параметров remoteapplicationmode и изменим её значение на 0:

remoteapplicationmode:i:0

При таком значении клиент RDP запускает сессию без разделения окон на индивидуальные дескрипторы HWND, что полностью исключает путаницу в Z-порядке слоев меню.

Способ 2. Перевод RDP-транспорта на протокол TCP и отключение RemoteFX

Если необходимо сохранить работу пользователей именно через RemoteApp, проанализируем настройки групповых политик (GPO) на сервере сборок. Изменение транспорта устраняет большинство задержек перерисовки.

  1. На сервере откроем редактор локальной групповой политики командой gpedit.msc.
  2. Перейдем по пути: Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удаленных рабочих столов → Узел сеансов удаленных рабочих столов → Подключения.
  3. Откроем параметр «Выбор транспортных протоколов RDP», переведем его в положение Включено и выберем значение Использовать только TCP.
  4. Перейдем в раздел Среда удаленных сеансов и установим для параметра «Использовать расширенную графику RemoteFX для RemoteApp» значение Отключено.
  5. Применим настройки командой gpupdate /force в командной строке.

Способ 3. Включение режима совместимости Windows NT / 2000

Рассмотрим вариант включения режима совместимости исполняемого файла платформы 1С 7.7. Это заставляет операционную систему применять классическую схему обработки событий интерфейса.

  1. Зайдем в каталог установки 1С (по умолчанию C:\Program Files (x86)\1Cv77\BIN\).
  2. Нажмем правой кнопкой мыши на файл 1cv7.exe или 1cv7s.exe и откроем Свойства.
  3. На вкладке Совместимость установим флажок «Запустить программу в режиме совместимости с:» и выберем Windows 2000 или Windows NT 4.0 (Service Pack 5).

Важная деталь: При включении режима совместимости необходимо протестировать работу используемых внешних компонентов (v7plus.dll, компоненты прямого доступа к БД, внешние библиотеки для работы с торговым оборудованием). Некоторое драйверы оборудования и ВК могут некорректно обрабатывать системные вызовы в режиме совместимости.

Способ 4. Отключение заставок и «Совета дня»

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

  1. Перейдем в папку BIN платформы 1С 7.7.
  2. Удалим или переименуем файлы подсказок 1cv7Cnfg.tip и 1cv7Main.tip.
  3. В реестре на сервере для пользователей в ветке [HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options\TipOfTheDay] установим значение ключа ShowInStart равным 0.

Способ 5. Использование альтернативных оболочек публикации (Citrix / Seamless)

В случаях, когда встроенные средства RemoteApp Windows Server 2016 не позволяют добиться стабильного результата при работе с 1С 7.7, проанализируем использование сторонних решения для публикации бесшовных окон:

  1. Применение продуктов Citrix Virtual Apps and Desktops (XenApp), в которых используется собственный графический протокол ICA, корректно обрабатывающий Z-порядок окон Win32.
  2. Использование сторонних утилит (Seamless RDP Shell), подменяющих стандартный механизм RemoteApp и транслирующих все дочерние окна 1С в одном общем виртуальном контейнере.
← На главную