К статье
Практический материал

Администрирование · 13 мин

Как зарегистрировать DLL на сервере 1С

Регистрация DLL на сервере 1С: regsvr32, разрядность 32/64 бита, права администратора, COM-объекты, типичные ошибки и проверка результата.

Регистрация DLL на сервере 1С требуется, когда прикладное решение использует внешние компоненты: COM-объекты, библиотеки интеграции с оборудованием, драйверы торгового оборудования или компоненты, разработанные по технологии Native API. Без корректной регистрации библиотеки в операционной системе сервера вызов из кода 1С завершится ошибкой вида «Не удалось создать объект» или «Ошибка при вызове конструктора».

Ключевая особенность серверной архитектуры 1С: код, выполняемый на сервере, обращается к DLL от имени процесса rphost, а не от имени пользователя, который работает в клиенте. Поэтому регистрировать компонент нужно именно на том компьютере, где запущен агент сервера 1С, и с учётом разрядности этого процесса. Регистрация на клиентском компьютере поможет только для толстого клиента и файловых баз.

Ниже разобраны способы регистрации через regsvr32, нюансы разрядности, различия между COM-компонентами и Native API, типичные ошибки и способы проверить, что библиотека действительно доступна серверу 1С.

Какие DLL вообще требуют регистрации

Не каждая библиотека, используемая в 1С, регистрируется в Windows. Первый шаг — определить тип компонента, потому что от этого зависит вся процедура.

COM-компоненты (OLE/ActiveX). Это классические DLL, которые регистрируются в реестре Windows через regsvr32 и создаются в коде 1С конструкцией Новый COMОбъект("Имя.ProgID"). К ним относятся многие драйверы оборудования, библиотеки интеграции, V83.COMConnector и сторонние ActiveX.

Внешние компоненты по технологии Native API. Такие DLL не регистрируются в системе. Они подключаются методом ПодключитьВнешнююКомпоненту() из файла или из макета конфигурации. Попытка зарегистрировать их через regsvr32 бесполезна — в них нет точки входа DllRegisterServer.

Обычные WinAPI-библиотеки. DLL без COM-интерфейсов, вызываемые через механизмы внешних функций, тоже не регистрируются — достаточно, чтобы файл был доступен по пути поиска.

Подготовка: что проверить перед регистрацией

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

Разрядность сервера определяет, какая версия DLL нужна. Если на сервере установлен 64-разрядный агент 1С (это стандарт для современных установок), то и DLL должна быть скомпилирована под x64. 32-разрядную библиотеку 64-битный процесс rphost загрузить не сможет — это ограничение операционной системы, а не 1С.

Проверить разрядность агента можно через диспетчер задач (процесс ragent.exe без пометки «32 бита» — это x64) или по каталогу установки: 64-разрядная платформа обычно находится в C:\Program Files\1cv8, а 32-разрядная — в C:\Program Files (x86)\1cv8.

Файл DLL разместите в каталоге, из которого его не будут удалять или перемещать, — например, в папке внутри каталога установки или отдельном служебном каталоге. После регистрации путь к файлу зафиксируется в реестре, и его перемещение сломает компонент.

Регистрация COM-DLL через regsvr32

Базовая процедура одинакова для любой COM-библиотеки, отличается только путь к правильной версии regsvr32.

Для 64-разрядной DLL (стандартный случай для 64-битного сервера 1С) откройте командную строку от имени администратора и выполните:

"C:\Windows\System32\regsvr32.exe" "C:\Components\MyComponent.dll"

Для 32-разрядной DLL на 64-разрядной Windows используется версия regsvr32 из каталога SysWOW64:

"C:\Windows\SysWOW64\regsvr32.exe" "C:\Components\MyComponent32.dll"

Нелогичное именование каталогов часто сбивает: System32 на 64-битной Windows содержит 64-разрядные утилиты, а SysWOW64 — 32-разрядные. Если перепутать версию, regsvr32 вернёт ошибку загрузки модуля, хотя сам файл исправен.

Успешная регистрация подтверждается диалоговым окном «DllRegisterServer в ... успешно выполнена». Если появилась ошибка 0x80004005 — почти всегда это недостаток прав: командная строка запущена без повышения до администратора.

Порядок регистрации COM-DLL на сервере 1С
  1. 1
    Скопируйте DLL в постоянный каталог на сервере, убедитесь, что разрядность файла совпадает с разрядностью сервера 1С
  2. 2
    Откройте командную строку от имени администратора (Пуск → cmd → Запуск от имени администратора)
  3. 3
    Выполните regsvr32 из System32 для 64-битной DLL или из SysWOW64 для 32-битной, указав полный путь к файлу
  4. 4
    Убедитесь, что появилось сообщение об успешном выполнении DllRegisterServer
  5. 5
    Перезапустите службу агента сервера 1С, чтобы процесс rphost подхватил новый компонент
  6. 6
    Проверьте создание объекта из кода 1С на сервере

Разрядность: главный источник проблем

Большинство случаев «зарегистрировал, но 1С не видит компонент» связаны именно с несовпадением разрядности. Ситуации бывают трёх типов.

64-битный сервер + 32-битная DLL. Объект не создаётся, хотя регистрация прошла успешно. Решение — найти 64-разрядную версию компонента у поставщика. Обойти ограничение штатно нельзя: процесс не может загрузить библиотеку другой архитектуры.

Клиент работает, сервер — нет. На клиенте тонкий или толстый клиент мог быть 32-разрядным и успешно создавать 32-битный COM-объект, тогда как сервер x64 не может. Проверяйте компонент именно в серверном контексте, например через фоновое задание или вызов сервера в толстом клиенте.

Регистрация прошла, но в другой ветке реестра. 32-битные компоненты на 64-битной Windows регистрируются в разделе WOW6432Node, и 64-битные приложения их оттуда не видят. Это нормальное поведение ОС, а не сбой.

Варианты подключения библиотек в 1С

regsvr32 (COM)

Для классических COM/ActiveX DLL. Регистрация в реестре, создание через Новый COMОбъект. Требует совпадения разрядности и прав администратора.

Native API (ПодключитьВнешнююКомпоненту)

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

V83.COMConnector на отдельном сервере

Когда COM-вызов нужен с машины без сервера 1С — ставится дистрибутив коннектора соответствующей разрядности и регистрируется comcntr.dll.

Особый случай: регистрация comcntr.dll (V83.COMConnector)

Частая задача — сделать доступным COM-соединитель с базой 1С на компьютере, где установлена только часть платформы. За это отвечает библиотека comcntr.dll из каталога bin установленной версии платформы.

Регистрируется она так же, через regsvr32:

"C:\Windows\System32\regsvr32.exe" "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"

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

Проверка результата — создание объекта Новый COMОбъект("V83.COMConnector") в любой среде, поддерживающей COM, например в PowerShell или в самой 1С.

powershell
$connector = New-Object -ComObject V83.COMConnector; $connector | Get-Member | Select-Object -First 5

Подключение внешних компонентов Native API без регистрации

Если компонент разработан по технологии Native API (обычно поставляется как ZIP-архив с DLL под разные платформы или как отдельная DLL), регистрация в Windows не требуется вообще. Компонент подключается программно:

ПодключитьВнешнююКомпоненту("ОбщийМакет.МояКомпонента", "МояКомпонента", ТипВнешнейКомпоненты.Native);

Компонента = Новый("AddIn.МояКомпонента.ИмяОбъекта");

Для работы на сервере важно, чтобы в архиве компоненты присутствовала сборка под платформу сервера (Windows x64 для типового сервера). Если поставщик включил только 32-битную Windows-сборку, на 64-разрядном сервере компонент не загрузится — потребуется запросить у разработчика нужную сборку.

Также учитывайте безопасность: подключение внешних компонентов может блокироваться профилями безопасности кластера и настройками защиты от опасных действий у пользователя. Если подключение молча не срабатывает, проверьте эти настройки в консоли кластера.

Проверка результата и типичные ошибки

Минимальная проверка — выполнить на сервере код, создающий объект, и посмотреть, нет ли исключения. Удобно использовать фоновое задание или обработку, запущенную с вызовом сервера: так гарантируется, что код выполняется именно в процессе rphost.

Дополнительно можно проверить наличие записей в реестре: для 64-битного компонента — в HKEY_CLASSES_ROOT\Имя.ProgID и HKEY_CLASSES_ROOT\CLSID\{GUID}, для 32-битного на x64-системе — в тех же ветках внутри Wow6432Node.

Типичные ошибки и их причины:

  • «Модуль загружен, но точка входа DllRegisterServer не найдена» — это не COM-библиотека, регистрировать нечего; вероятно, компонент Native API или обычная DLL.
  • Ошибка 0x80004005 — нет прав администратора или антивирус блокирует запись в реестр.
  • «Не удалось создать объект» в 1С при успешной регистрации — несовпадение разрядности или компонент зарегистрирован не в той ветке реестра.
  • «Ошибка загрузки модуля» — рядом с DLL отсутствуют зависимые библиотеки (например, Visual C++ Redistributable), которые должны быть установлены на сервере.
Типичные ошибки при регистрации DLL на сервере 1С
01
Регистрация 32-битной DLL для 64-битного сервера — объект не создаётся, хотя regsvr32 отработал успешно
02
Запуск regsvr32 без прав администратора — ошибка 0x80004005, компонент не зарегистрирован
03
Регистрация на клиентском ПК вместо сервера — в клиенте работает, в серверном коде падает с ошибкой
04
Перемещение или удаление файла DLL после регистрации — путь в реестре указывает в никуда, объект перестаёт создаваться
05
Отсутствие перезапуска агента сервера после замены DLL — rphost продолжает использовать старую версию
06
Попытка зарегистрировать Native API компонент через regsvr32 — точки входа нет, нужно подключение через ПодключитьВнешнююКомпоненту

Безопасность и регламентные моменты

Любая DLL, загружаемая сервером 1С, выполняется в контексте учётной записи службы агента (обычно USR1CV8 или системная учётная запись) с её правами на файловую систему и сеть. Вредоносная или некорректно написанная библиотека способна повредить данные или остановить кластер, поэтому используйте только компоненты от доверенных поставщиков.

Все операции по регистрации и замене компонентов планируйте на время регламентных работ: остановка службы агента разорвёт сеансы пользователей. Перед заменой DLL сохраните копию прежней версии — это позволит быстро откатиться, если новая версия окажется несовместимой.

Если серверов в кластере несколько, регистрацию нужно выполнить на каждом рабочем сервере, где может выполняться соответствующий код, иначе поведение будет зависеть от того, на какой сервер попал сеанс.

Итог

Что важно запомнить

COM-DLL регистрируется через regsvr32 с правами администратора на самом сервере 1С, версия regsvr32 и разрядность DLL должны совпадать с разрядностью сервера. Компоненты Native API не регистрируются, а подключаются программно. После регистрации перезапустите агент сервера и проверьте создание объекта именно в серверном контексте.

Частые вопросы

Зарегистрировал DLL, но 1С пишет «Не удалось создать объект». Что делать?

Чаще всего причина в несовпадении разрядности: 64-разрядный сервер не может загрузить 32-битную библиотеку. Проверьте разрядность агента сервера и DLL, убедитесь, что использовали правильную версию regsvr32, и перезапустите службу агента. Также проверьте, что код, создающий объект, действительно выполняется на сервере, а не на клиенте.

Нужно ли регистрировать внешнюю компоненту Native API?

Нет. Компоненты Native API подключаются методом ПодключитьВнешнююКомпоненту из макета конфигурации или файла. У таких DLL нет точки входа DllRegisterServer, поэтому regsvr32 завершится ошибкой — это нормально и не означает неисправность файла.

Компонент работает в толстом клиенте, но не работает на сервере. Почему?

Клиент и сервер — разные процессы, часто разной разрядности и на разных компьютерах. DLL должна быть зарегистрирована на самом сервере и соответствовать разрядности rphost. Проверяйте компонент через код с явным выполнением на сервере, например через фоновое задание.

Как отменить регистрацию DLL?

Выполните regsvr32 с ключом /u, указав путь к файлу, например: regsvr32 /u "C:\Components\MyComponent.dll". Перед отменой регистрации остановите службу агента сервера 1С, чтобы файл не был занят процессом. После отмены записи о компоненте удаляются из реестра.

После обновления платформы перестал работать V83.COMConnector. В чём причина?

При установке новой версии платформы comcntr.dll оказывается в новом каталоге с номером версии в пути. Внешние приложения продолжают ссылаться на старую регистрацию. Зарегистрируйте comcntr.dll из каталога новой версии через regsvr32 и убедитесь, что версия коннектора совпадает с версией сервера.

Можно ли зарегистрировать DLL без прав администратора?

Штатная регистрация через regsvr32 требует прав администратора, так как записывает данные в системные ветки реестра. Существуют механизмы регистрации COM для текущего пользователя (registration-free COM, манифесты), но они требуют специальной подготовки приложения и для сервера 1С обычно не применяются. Практичный путь — выполнить регистрацию через администратора сервера.