Администрирование · 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 — почти всегда это недостаток прав: командная строка запущена без повышения до администратора.
- 1Скопируйте DLL в постоянный каталог на сервере, убедитесь, что разрядность файла совпадает с разрядностью сервера 1С
- 2Откройте командную строку от имени администратора (Пуск → cmd → Запуск от имени администратора)
- 3Выполните regsvr32 из System32 для 64-битной DLL или из SysWOW64 для 32-битной, указав полный путь к файлу
- 4Убедитесь, что появилось сообщение об успешном выполнении DllRegisterServer
- 5Перезапустите службу агента сервера 1С, чтобы процесс rphost подхватил новый компонент
- 6Проверьте создание объекта из кода 1С на сервере
Разрядность: главный источник проблем
Большинство случаев «зарегистрировал, но 1С не видит компонент» связаны именно с несовпадением разрядности. Ситуации бывают трёх типов.
64-битный сервер + 32-битная DLL. Объект не создаётся, хотя регистрация прошла успешно. Решение — найти 64-разрядную версию компонента у поставщика. Обойти ограничение штатно нельзя: процесс не может загрузить библиотеку другой архитектуры.
Клиент работает, сервер — нет. На клиенте тонкий или толстый клиент мог быть 32-разрядным и успешно создавать 32-битный COM-объект, тогда как сервер x64 не может. Проверяйте компонент именно в серверном контексте, например через фоновое задание или вызов сервера в толстом клиенте.
Регистрация прошла, но в другой ветке реестра. 32-битные компоненты на 64-битной Windows регистрируются в разделе WOW6432Node, и 64-битные приложения их оттуда не видят. Это нормальное поведение ОС, а не сбой.
Варианты подключения библиотек в 1С
Для классических COM/ActiveX DLL. Регистрация в реестре, создание через Новый COMОбъект. Требует совпадения разрядности и прав администратора.
Для компонентов по технологии 1С. Регистрация в системе не нужна, компонент подключается из макета или файла, доступны варианты под разные платформы в одном ZIP-архиве.
Когда 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С.
$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С, выполняется в контексте учётной записи службы агента (обычно 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С обычно не применяются. Практичный путь — выполнить регистрацию через администратора сервера.