Работа в терминальном режиме (RDP) накладывает специфические требования на стабильность графической подсистемы платформы 1С:Предприятие. Одной из наиболее неприятных проблем является внезапное закрытие программы («вылет») при выполнении самых обычных действий, например, при перемещении курсора по строкам табличной части документа с помощью стрелок на клавиатуре. При этом в системном журнале Windows фиксируется ошибка с кодом 0xc0000005, указывающая на модуль ntdll.dll.
Разберем детально, почему это происходит, и проанализируем последовательность шагов, которые помогут нам стабилизировать работу системы.
Прежде всего, проанализируем информацию из логов. Ошибка 0xc0000005 (Access Violation) означает, что поток программы попытался обратиться к адресу памяти, к которому у него нет прав доступа (либо адрес не существует, либо он защищен). В контексте 1С и RDP это чаще всего происходит в момент перерисовки графического интерфейса. Когда мы перемещаемся по строкам списка, программа должна мгновенно пересчитывать координаты фокуса и отрисовывать выделение. Если в расчетах координат возникает ошибка, вызванная некорректным масштабированием, происходит обращение к неверному участку памяти, и ntdll.dll (ядро пользовательского режима Windows) принудительно завершает процесс 1cv8c.exe.
Для начала выясним, носит ли проблема массовый характер или локализована на конкретном рабочем месте. Проанализируем следующие моменты:
chdbfl.exe. Если проверка не выявила ошибок, переходим к настройкам интерфейса.Как показывает практика, основной причиной «чудес» в версиях платформы 8.3.15.х и выше является механизм High DPI. Если у пользователя установлено два монитора или используется монитор с высоким разрешением, Windows часто предлагает масштаб 125% или 150%. Платформа 1С в терминальной сессии может некорректно обрабатывать такие значения.
Выполним следующие действия:
Если после установки масштаба 100% вылеты прекратились, мы нашли причину. Однако работать на мелком шрифте может быть неудобно, поэтому рассмотрим альтернативные способы исправления без изменения глобального масштаба.
Если нам необходимо оставить масштаб 125% в системе, попробуем заставить 1С игнорировать системное масштабирование. Разберем, как это сделать:
C:\Program Files (x86)\1cv8\номер_версии\bin\).1cv8c.exe и нажмем правую кнопку мыши, выбрав «Свойства».Это заставит саму платформу отрисовывать интерфейс, не полагаясь на алгоритмы Windows, которые могут конфликтовать с RDP-драйвером.
Поскольку проблема проявляется именно в терминальном режиме, проанализируем настройки клиента Remote Desktop Connection (mstsc.exe):
Код исключения 0xc0000005 напрямую связан с механизмом безопасности DEP. Если система защиты считает, что 1С пытается выполнить код в сегменте памяти, предназначенном только для данных, она мгновенно «убивает» процесс. Рассмотрим, как добавить 1С в исключения:
1cv8c.exe.Важно: На 64-битных системах DEP для 64-битных процессов отключить невозможно, но для 32-битного клиента 1С (x86) это действие может помочь.
Иногда стандартной очистки кэша (папок Local и Roaming) недостаточно. Проанализируем ситуацию: 1С сохраняет настройки положения окон, ширины колонок и фокуса строк в специальных файлах. Если там «застряли» неверные координаты, рассчитанные при старом масштабе, программа будет вылетать снова. Выясним, что нужно удалить:
%AppData%\1C\1cv8\ и %LocalAppData%\1C\1cv8\.v8u_ui.bkp, если он присутствует в профиле пользователя — его следует удалить, так как он хранит настройки интерфейса «Такси».Версия платформы 8.3.15.1869, упомянутая в обсуждении, имеет известные ошибки взаимодействия с графической подсистемой Windows в режиме терминального сервера. Разработчики 1С регулярно выпускают исправления для ветки 8.3.18, 8.3.20 и выше, где работа с DPI была существенно пересмотрена.
Если вышеперечисленные методы не принесли стабильного результата, настоятельно рекомендуем обновить платформу до актуального релиза. Это позволит не только избавиться от вылетов ntdll.dll, но и повысить общую производительность системы в режиме «Тонкого клиента».
Мы выяснили, что основной причиной аварийного завершения 1С при навигации по строкам является конфликт масштабирования DPI в сессиях RDP. Наиболее быстрым решением является возврат к масштабу 100% или настройка переопределения DPI в свойствах ярлыка. Совместное применение этих мер вместе с очисткой кэша позволяет полностью устранить ошибку 0xc0000005.