С выходом платформы 1С версии 8.3.14 многие администраторы и разработчики столкнулись с неприятной ситуацией: при попытке установить COM-соединение (через V83.ComConnector) система выдает критическую ошибку Windows: «Запуск программы невозможен, так как на компьютере отсутствует CORE_RL_magick_.dll». Примечательно, что после закрытия окна с ошибкой соединение может продолжать работать, но само появление алерта блокирует автоматизированные процессы и пугает пользователей. Рассмотрим подробно, почему это происходит и как устранить проблему навсегда.
Начиная с релизов ветки 8.3.14, компания 1С интегрировала в состав платформы пакет ImageMagick — мощный набор инструментов для обработки графики. Эти библиотеки (имена которых начинаются на CORE_RL_) используются платформой для формирования QR-кодов, преобразования форматов изображений и другой работы с контентом. Основная проблема заключается в том, что библиотека comcntr.dll, отвечающая за COM-соединение, теперь имеет зависимости от этих графических модулей.
Проанализируем механизм загрузки: когда ваше приложение (например, другая база 1С или внешняя программа на C#) вызывает V83.ComConnector, операционная система загружает comcntr.dll в адресное пространство вызывающего процесса. Этот процесс называется внутрипроцессным (inproc) взаимодействием. Однако поиск зависимых библиотек, таких как CORE_RL_magick_.dll, CORE_RL_zlib_.dll и других, Windows осуществляет по определенным правилам: сначала в папке, где лежит исполняемый файл (.exe) родителя, а затем в системных путях, прописанных в переменной PATH.
Поскольку родительский процесс (например, 1cv8.exe версии 8.2 или ваш собственный сервис) находится в другой папке, а библиотеки ImageMagick лежат в папке bin новой платформы 8.3.14, загрузчик Windows их просто не находит. Выясним, какие шаги помогут решить эту задачу.
Это самый надежный и рекомендуемый способ, который позволяет операционной системе находить нужные библиотеки независимо от того, из какой папки запущен процесс. Рассмотрим алгоритм действий:
Path и нажмем Изменить.bin установленной платформы 1С. Например: C:\Program Files\1cv8\8.3.14.1565\bin.После внесения изменений необходимо перезагрузить компьютер (или как минимум перезапустить все службы 1С и вызывающие приложения), чтобы операционная система обновила кэш переменных окружения. Теперь при обращении к comcntr.dll система увидит путь к CORE_RL_magick_.dll в переменной PATH и загрузит её без ошибок.
Если вы инициируете COM-соединение из внешнего приложения (например, на .NET или C++), можно воспользоваться приемом смены текущей папки процесса непосредственно перед созданием объекта. Проанализируем логику этого метода: мы принудительно заставляем Windows считать папку bin платформы 1С «родной» для текущего процесса на момент загрузки библиотеки.
Рассмотрим пример логики (псевдокод):
// Сохраняем текущую директорию
String oldPath = Directory.GetCurrentDirectory();
// Устанавливаем рабочую папку в каталог bin платформы 1С
Directory.SetCurrentDirectory("C:\\Program Files\\1cv8\\8.3.14.1565\\bin");
// Инициализируем COM-соединение
var connector = new COMObject("V83.ComConnector");
var connection = connector.Connect("Srvr=ServerName;Ref=BaseName;");
// Возвращаем рабочую директорию обратно
Directory.SetCurrentDirectory(oldPath);
Этот способ эффективен, так как при поиске зависимостей CORE_RL_*.dll Windows в первую очередь заглядывает в текущую рабочую директорию процесса. Однако внутри самой 1С (например, при соединении из 8.3 в 8.3) изменить рабочую папку средствами встроенного языка может быть затруднительно, поэтому для 1С-разработчиков приоритетным остается Решение 1.
Иногда проблема усугубляется тем, что в реестре Windows зарегистрирована версия comcntr.dll от старой платформы, которая пытается вызвать новые библиотеки. Выполним перерегистрацию компоненты вручную. Посмотрим, как это сделать правильно:
regsvr32 /u "C:\Program Files\1cv8\8.3.14.1565\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.14.1565\bin\comcntr.dll"
Если вы используете 64-битную ОС и 32-битную платформу 1С, помните, что регистрация должна проходить через соответствующий regsvr32. Для 32-битных библиотек на 64-битной системе лучше использовать C:\Windows\SysWOW64\regsvr32.exe.
Библиотеки ImageMagick, включенные в состав 1С, требуют наличия в системе корректных версий Microsoft Visual C++ Redistributable (обычно версий 2015-2019). Проанализируем ситуацию: если на сервере установлена только сама платформа 1С, но отсутствуют системные компоненты среды выполнения C++, то даже при наличии CORE_RL_magick_.dll в папке bin, она не сможет инициализироваться, так как не найдет свои зависимости (например, vcruntime140.dll).
Рекомендуется скачать с официального сайта Microsoft и установить актуальные пакеты VC++ Redistributable x86 и x64. Это часто снимает неочевидные ошибки при работе с COM и графикой.
Если по каким-то причинам изменение PATH не помогает (например, из-за специфических прав доступа службы Agent 1C), существует «грязный», но рабочий метод. Выясним его суть: мы копируем все необходимые файлы из папки bin 1С непосредственно в системные папки Windows, где поиск выполняется всегда.
Какие файлы нужно скопировать:
CORE_RL_*.dll (их порядка 15-20 штук).libxml2.dll, libxslt.dll, iconv.dll (если они требуются для работы).Куда копировать:
C:\Windows\System32.C:\Windows\SysWOW64.Внимание: Мы крайне не рекомендуем этот метод как основной, так как при обновлении платформы вам придется вручную обновлять и эти файлы в системных папках, что может привести к конфликту версий в будущем.
Проблема с CORE_RL_magick_.dll — это следствие изменения архитектуры 1С и внедрения сторонних графических модулей в ядро платформы. Для стабильной работы COM-соединения в современных версиях (8.3.14+) всегда проверяйте наличие пути к папке bin в системной переменной PATH и актуальность регистрации comcntr.dll. Эти простые действия избавят вас от назойливых алертов операционной системы и обеспечат бесперебойную работу обменов данными.