При запуске информационных баз 1С:Предприятия 7.7, активно использующих популярную внешнюю компоненту FormEx.dll, пользователи могут сталкиваться с внезапным аварийным закрытием программы (падением процесса 1cv7s.exe или 1cv7.exe без вывода информативных диагностических сообщений). Опытным путем часто удается установить четкую взаимосвязь: сбой возникает только в том случае, когда на рабочей станции запущен клиент удаленного доступа TeamViewer (особенно если в нем выполнен вход в учетную запись). Разберем причины возникновения этой ошибки и выясним, как восстановить стабильную совместную работу программ.
Проанализируем механику работы обоих программных модулей, чтобы понять природу несовместимости:
SetWindowsHookEx) и принудительно внедряет свою DLL во все запущенные 32-битные GUI-процессы системы.FormEx предоставляет широкие возможности по модификации интерфейса платформы 1С 7.7 (раскраска строк табличных частей, перехват горячих клавиш, событий мыши, расширенная работа с формами). Для решения этих задач компонента выполняет глубокую подмену оконных процедур (WindowProc) элементов интерфейса 1С.WM_NCPAINT или WM_NCHITTEST) и выстроить собственную цепочку через функцию CallWindowProc, возникает конфликт указателей и адресов памяти. В результате разрыва цепочки оконных процедур операционная система фиксирует исключение нарушения прав доступа к памяти (Access Violation, код 0xC0000005), и платформа 1С мгновенно аварийно завершает свою работу.Рассмотрим основной и самый быстрый способ решения проблемы, который полностью устраняет инъекцию сторонней библиотеки в процесс платформы:
После применения этой настройки TeamViewer перестанет внедрять свой модуль в чужие процессы, и загрузка FormEx.dll при входе в базу 1С 7.7 будет проходить в штатном режиме.
Если функция QuickConnect активно используется для взаимодействия с другими приложениями в операционной системе, полное ее отключение может быть нежелательным. В таком случае разберем точечную настройку исключений:
1cv7.exe, 1cv7s.exe и 1cv7l.exe.В этом сценарии TeamViewer продолжит отображать кнопку в других окнах Windows, однако полностью проигнорирует процессы 1С, исключая возникновение сбоя Access Violation.
Рассмотрим альтернативные конфигурации удаленного доступа, которые исключают внедрение лишних GUI-оверлеев:
TeamViewer Host. Данная служба предназначена исключительно для неконтролируемого входящего доступа и не содержит модулей оверлея QuickConnect.FormEx.dll (ветки 2.0.5.x и выше) разработчиком были реализованы дополнительные проверки валидности дескрипторов окон и указателей перед выполнением сабклассинга, что повышает устойчивость библиотеки к сторонним хукам в системе.Выясним, какие еще сторонние приложения могут провоцировать аналогичное падение 1С 7.7 при использовании FormEx.dll. Так как архитектура 1С 7.7 (32-битное приложение на базе классических библиотек MFC) крайне чувствительна к целостности цепочек оконных сообщений, аналогичные сбои могут вызывать:
В случае падения базы при инициализации внешних компонент в первую очередь проверяем наличие работающего ПО, использующего глобальные хуки интерфейса, и настраиваем списки исключений для процесса 1cv7s.exe.