Как исправить ошибку "Недопустимая строка с указанием класса" при работе с COM 1С после обновления БСП до версии 3.0.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обновлении Библиотеки стандартных подсистем (БСП) до версии 3.0.3 и выше многие разработчики сталкиваются с неприятной проблемой: привычные механизмы администрирования, такие как блокировка соединений или завершение сеансов пользователей, перестают работать. Программа выдает критическую ошибку -2147221005(0x800401F3): Недопустимая строка с указанием класса. В этой статье мы подробно разберем, почему это происходит и как правильно настроить серверную часть, чтобы восстановить работоспособность системы.

Анализируем причину возникновения ошибки

Первым делом выясним причину изменений. В старых версиях БСП (до 3.0.3) общие модули, отвечающие за работу с COM-соединением (например, АдминистрированиеКластераCOM), имели флаг контекста исполнения "Клиент". Это означало, что инициализация COM-объекта происходила на стороне клиентского приложения (толстого или тонкого клиента). Поскольку на рабочих станциях администраторов и разработчиков библиотека comcntr.dll обычно регистрируется автоматически при установке платформы, проблем не возникало.

Начиная с версии БСП 3.0.3, политика изменилась. Теперь код администрирования выполняется строго в контексте "Сервер" или "Внешнее соединение". Это логичный шаг с точки зрения архитектуры (сервер должен сам управлять своими сеансами), но он обнажает проблему: на серверной машине библиотека comcntr.dll часто либо не зарегистрирована вовсе, либо зарегистрирована некорректно для нужной разрядности платформы.

Рассмотрим фрагмент кода БСП, на котором происходит сбой:


Функция COMСоединитель()
    Если БезопасныйРежим <> Ложь Тогда
        ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме'");
    КонецЕсли;
    
    Если ОбщегоНазначения.РазделениеВключено Тогда
        ВызватьИсключение НСтр("ru = 'В модели сервиса недопустимо выполнение функций администрирования'");
    КонецЕсли;
    
    // Ошибка возникает на следующей строке:
    Возврат Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя());
КонецФункции

Функция ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя() обычно возвращает строку "v83.COMConnector". Ошибка означает, что операционная система Windows на сервере не может найти в реестре информацию о том, какая библиотека отвечает за этот класс.

Шаг 1: Правильная регистрация COM-библиотеки на сервере

Многие системные администраторы полагают, что достаточно один раз запустить команду регистрации. Однако на практике в реестре могут накапливаться "хвосты" от предыдущих версий платформы 1С. Разберем алгоритм глубокой перерегистрации, который помог пользователям форума.

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

Проанализируем последовательность команд:

  1. Переходим в каталог bin установленной платформы (например, для 64-битной версии):
    cd "C:\Program Files\1cv8\8.3.18.1363\bin"
  2. Выполняем деинсталляцию компоненты несколько раз. Это позволяет "вычистить" дублирующиеся записи в реестре:
    regsvr32 /u comcntr.dll (повторить 2-3 раза)
  3. Выполняем чистую регистрацию компоненты:
    regsvr32 comcntr.dll

Важно: Если после выполнения regsvr32 comcntr.dll вы получили сообщение об успехе, но ошибка в 1С сохраняется, перейдем к проверке разрядности.

Шаг 2: Учет разрядности системы (x86 vs x64)

Выясним причину, по которой регистрация может не подхватываться сервером 1С. Серверное приложение 1С:Предприятие чаще всего является 64-битным. В этом случае оно ищет 64-битную версию библиотеки comcntr.dll.

Посмотрим на ситуацию, когда на одном сервере установлены оба варианта. В реестре Windows за регистрацию 32-битных и 64-битных COM-объектов отвечают разные ветки. Убедитесь, что вы регистрируете именно ту библиотеку, которая соответствует разрядности процесса rphost.

Шаг 3: Настройка прав доступа для службы сервера 1С

Поскольку теперь код выполняется на сервере, создание COM-объекта происходит от имени пользователя, под которым запущена служба 1C:Enterprise 8.3 Server Agent. По умолчанию это локальный пользователь USR1CV8.

Проанализируем необходимые права для этого пользователя:

  1. Пользователь должен иметь права на чтение и выполнение в папке bin, где лежит comcntr.dll.
  2. Пользователь должен иметь права в реестре на ветку HKEY_CLASSES_ROOT\CLSID и конкретно на записи, относящиеся к v83.COMConnector.
  3. Если на сервере настроены жесткие политики безопасности, может потребоваться добавить пользователя в группу "Пользователи DCOM".

Шаг 4: Решение через консоль "Службы компонентов" (COM+)

Если стандартная регистрация через regsvr32 не помогает (часто бывает при конфликте разрядностей), рассмотрим продвинутый метод — использование обертки COM+.

Разберем этот процесс по шагам:

  1. Откройте "Панель управления" -> "Администрирование" -> "Службы компонентов".
  2. Перейдите в "Компьютеры" -> "Мой компьютер" -> "Приложения COM+".
  3. Создайте новое приложение (Пустое приложение). Назовите его, например, 1C_COM_Connector. Установите тип "Серверное приложение".
  4. В качестве учетной записи укажите данные пользователя, от имени которого работает сервер 1С (или системную учетную запись с достаточными правами).
  5. В созданном приложении перейдите в папку "Компоненты" и добавьте новый компонент. Выберите "Установка новых компонентов" и укажите путь к comcntr.dll в папке bin вашей платформы.

Этот метод позволяет изолировать работу COM-объекта в отдельном процессе dllhost.exe, что решает проблемы с несовместимостью разрядности и повышает стабильность работы сервера.

Шаг 5: Переход на современные методы (RAS/RAC)

В завершение проанализируем стратегию развития платформы 1С. Фирма "1С" постепенно уходит от технологии COM в пользу RAS (Remote Administration Server). В новых версиях БСП предусмотрена возможность работы через этот интерфейс.

Рассмотрим, как переключиться на этот режим:

Для работы этого режима на сервере 1С должна быть запущена служба ras.exe. Это исключает зависимость от реестра Windows и библиотек dll, делая систему более устойчивой к обновлениям платформы.

Подведем итог: Основная причина ошибки при переходе на БСП 3.0.3 — отсутствие регистрации нужной версии comcntr.dll на сервере. Рекомендуется выполнить многократную перерегистрацию библиотеки (с ключом /u и без него) от имени администратора, строго соблюдая разрядность платформы. В долгосрочной перспективе лучшим решением будет настройка работы через сервер администрирования 1С (RAS).

← На главную