При настройке синхронизации между различными конфигурациями (например, между "1С:Бухгалтерия предприятия 3.0" и "1С:Зарплата и управление персоналом 3.1") администраторы часто сталкиваются с проблемой невозможности регистрации или работы компоненты comcntr.dll. Это приводит к ошибкам вида "Класс не зарегистрирован" или сбоям при вызове конструктора COMObject. Проблема особенно актуальна для 64-битных версий Windows Server, где сосуществуют 32-битные и 64-битные приложения.
Рассмотрим подробно причины возникновения этой ошибки и разберем по шагам все способы её решения — от простой регистрации в реестре до настройки "обертки" в службах компонентов COM+.
Прежде всего, проанализируем ситуацию. Ошибка с кодом 0x80040154 или ошибка regsvr32 с кодом 3 обычно означают, что система не может найти библиотеку по указанному пути, либо существует конфликт разрядности. В 64-битных операционных системах Windows важно понимать разницу между папками System32 и SysWOW64. Вопреки названию, 32-битные системные утилиты (включая регистратор библиотек) находятся в папке SysWOW64, а 64-битные — в System32.
Если вы используете 32-битную платформу 1С на 64-битном сервере, обычная команда регистрации может не сработать или сработать некорректно для процессов 1С.
Посмотрим на самый распространенный метод решения. Если у вас установлена 32-битная платформа 1С, нам необходимо вызвать именно 32-битный регистратор. Для этого выполним следующие действия:
Пример команды для регистрации (подставьте свою версию платформы):
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.13.1513\bin\comcntr.dll"
Обратите внимание на кавычки — они обязательны, если в пути есть пробелы. Если регистрация прошла успешно, вы увидите сообщение "DllRegisterServer в ... успешно". Однако, как показывает практика, даже успешная регистрация не всегда гарантирует работу компоненты в самой 1С, особенно если обмен запускается на стороне сервера (64-бит).
Если простая регистрация не помогает, или если у вас возникает конфликт разрядностей (например, сервер 1С 64-битный, а компонента требуется 32-битная для связи со старыми базами), разберем метод создания приложения COM+. Это позволяет системе запускать 32-битную DLL в отдельном процессе, к которому сможет обращаться 64-битный сервер 1С.
Проанализируем шаги настройки приложения COM+:
v83_COMConnector. Установим переключатель "Серверное приложение".USR1CV8), и ввести её пароль. Это решит проблемы с правами доступа при фоновых обменах.comcntr.dll из папки bin вашей платформы.После этого компонента будет работать через изолированный процесс, что снимает большинство проблем совместимости.
Рассмотрим ситуацию, когда библиотека зарегистрирована, но 1С все равно её "не видит". Выясним причину в системных настройках:
1. Проверка прав на папку: Убедитесь, что у пользователя USR1CV8 (или того, под кем работает служба 1С) есть права "Чтение и выполнение" на всю папку bin соответствующей версии платформы. Часто администраторы регистрируют DLL под своей учетной записью, но служба сервера не может достучаться до файла физически.
2. Библиотеки Microsoft Visual C++: Для работы comcntr.dll требуются установленные пакеты Visual C++ Redistributable (обычно 2005, 2010 и 2012 годов). Проанализируем установленные программы в системе — если их нет, компонента просто не сможет инициализироваться.
3. Предотвращение выполнения данных (DEP): В Windows Server настройки DEP могут блокировать работу сторонних COM-объектов. Проверим настройки в "Свойствах системы" — "Дополнительно" — "Производительность" — "Параметры" — "Предотвращение выполнения данных". Попробуйте временно установить режим "Включить DEP только для основных программ и служб Windows" или добавить rphost.exe в исключения.
Иногда в системе установлено несколько версий 1С, и реестр "замусорен" ссылками на старые пути comcntr.dll, которых уже нет. В этом случае даже правильная регистрация новой версии не помогает, так как система обращается по старому адресу (CLSID).
Рассмотрим порядок действий в реестре:
regedit.HKEY_CLASSES_ROOT\CLSID\{AD438E88-A0F3-4375-9610-3367180D2161}. Это стандартный GUID для V83.COMConnector.InprocServer32. Там должен быть указан актуальный путь к файлу. Если путь ведет в несуществующую папку старой платформы — вручную исправьте его или удалите ветку перед повторной регистрацией через regsvr32.Многие системные администраторы отмечают, что после манипуляций с регистрацией COM-объектов в Windows Server 2012 и выше изменения могут не подхватываться сразу. Настоятельно рекомендуем выполнить перезагрузку сервера после того, как вы выполнили регистрацию или создали приложение COM+. Это гарантирует обновление кэша зарегистрированных классов в системе.
Подводя итог, можно сказать: наиболее стабильным решением для современных 64-битных серверов является комбинация регистрации через SysWOW64 и последующее оборачивание компоненты в приложение COM+ с указанием явных прав пользователя. Это минимизирует риски возникновения ошибки "Класс не зарегистрирован" при автоматической синхронизации данных.