Администрирование · 13 мин
Как зарегистрировать DLL в 1С 8.3
Как зарегистрировать DLL в 1С 8.3 через regsvr32 и реестр: разрядность, права администратора, типичные ошибки 0x80070005 и способы их устранения.
Внешние компоненты в виде DLL-файлов расширяют возможности платформы 1С 8.3: подключают торговое оборудование, криптопровайдеры, сканеры штрихкодов и нестандартные функции. Прежде чем компонент станет доступен из кода 1С через ПодключитьВнешнююКомпоненту, операционная система должна его «увидеть» — для этого выполняется регистрация DLL в реестре Windows.
Регистрация нужна для COM-компонентов (ActiveX), которые не входят в состав платформы и не упакованы в макет конфигурации по технологии Native API. Библиотеки Native API и компоненты, поставляемые внутри конфигурации, обычно регистрируются самой 1С автоматически. А вот сторонние COM-DLL — драйверы, библиотеки интеграции, самописные компоненты — требуют ручной регистрации через штатную утилиту regsvr32.
Основные сложности при регистрации связаны не с самой командой, а с окружением: разрядностью клиента 1С и DLL, правами доступа, антивирусной блокировкой и отсутствием зависимых библиотек. Ниже разобраны все сценарии — от простейшей регистрации до диагностики ошибок.
Когда DLL нужно регистрировать, а когда нет
Не всякая внешняя компонента требует ручной регистрации. Платформа 1С 8.3 умеет работать с компонентами по технологии Native API: такие DLL упаковываются в ZIP-архив с файлом манифеста, помещаются в макет конфигурации и подключаются методом ПодключитьВнешнююКомпоненту без записи в реестр Windows. Платформа сама извлекает библиотеку и загружает её в процесс.
Ручная регистрация через regsvr32 обязательна для COM-компонентов — библиотек, созданных по технологии ActiveX/COM. Именно так реализовано большинство драйверов торгового оборудования, старые внешние компоненты и сторонние библиотеки интеграции. Признак того, что компонент COM-типа: разработчик поставляет его с инструкцией по регистрации или с bat-файлом, вызывающим regsvr32.
Отдельный случай — компоненты, входящие в состав типовых конфигураций (например, драйверы из библиотеки подключаемого оборудования). Они, как правило, устанавливаются и регистрируются автоматически при первом подключении устройства из интерфейса 1С. Если оборудование подключается штатно, вмешательство в реестр не требуется.
Подготовка: разрядность, права и расположение файла
Перед регистрацией определите три вещи: разрядность клиента 1С, разрядность самой DLL и наличие прав администратора. Разрядность клиента видна в диспетчере задач (рядом с процессом 1cv8.exe указано «32 бита» или ничего для 64-разрядного) либо в информации о программе. Разрядность DLL можно посмотреть в документации поставщика или через утилиты анализа PE-заголовков.
Правило простое: клиент 1С может загрузить только DLL своей разрядности. 32-разрядный клиент работает с 32-разрядными компонентами, 64-разрядный — с 64-разрядными. Если у вас 64-разрядная Windows, но 32-разрядный клиент 1С (это частая ситуация), регистрировать нужно 32-разрядную версию DLL через regsvr32 из папки C:\Windows\SysWOW64.
Скопируйте DLL в постоянную папку без русских букв и пробелов в пути, например C:\Components\. Регистрация привязывается к полному пути файла: если после регистрации переместить или удалить DLL, компонент перестанет работать. Не регистрируйте библиотеки с рабочего стола, из папки «Загрузки» или с сетевого диска.
Регистрация DLL через командную строку
Стандартный способ — утилита regsvr32, запущенная из командной строки с повышенными правами. Без прав администратора запись в раздел реестра HKEY_CLASSES_ROOT будет отклонена, и вы получите ошибку с кодом 0x80070005 (отказано в доступе).
- 1Скопируйте DLL в постоянную папку, например C:\Components\
- 2Откройте командную строку от имени администратора: Пуск → введите cmd → «Запуск от имени администратора»
- 3Для 64-разрядной DLL выполните: C:\Windows\System32\regsvr32.exe C:\Components\mycomponent.dll
- 4Для 32-разрядной DLL на 64-разрядной Windows выполните: C:\Windows\SysWOW64\regsvr32.exe C:\Components\mycomponent.dll
- 5Дождитесь окна с сообщением «DllRegisterServer ... успешно выполнена»
- 6Перезапустите клиент 1С и проверьте подключение компонента
Пример команды для 64-разрядной библиотеки:
C:\Windows\System32\regsvr32.exe "C:\Components\MyComponent.dll"Пример для 32-разрядной библиотеки на 64-разрядной Windows:
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyComponent32.dll"Кавычки вокруг пути обязательны, если в нём есть пробелы. Успешная регистрация подтверждается диалоговым окном с текстом об успешном выполнении DllRegisterServer. Если окно содержит код ошибки — переходите к разделу диагностики.
Отмена регистрации
Если компонент нужно убрать из системы, выполните ту же команду с ключом /u: regsvr32 /u C:\Components\MyComponent.dll. После отмены регистрации файл можно удалить или заменить новой версией. Заменять DLL без отмены регистрации допустимо, только если путь и имя файла совпадают, — но надёжнее сначала отменить регистрацию, заменить файл и зарегистрировать заново.
Регистрация на сервере 1С и для всех пользователей
Если компонент вызывается в серверном коде (в процедурах с директивой &НаСервере или в фоновых заданиях), регистрировать DLL нужно на сервере 1С:Предприятия, а не на компьютерах пользователей. При этом важно совпадение разрядности: рабочий процесс сервера 1С (rphost) в типовой установке 64-разрядный, поэтому нужна 64-разрядная версия компонента.
Если компонент используется и на клиенте, и на сервере, его придётся зарегистрировать в обоих местах — возможно, разными версиями DLL под разную разрядность. Учитывайте это при планировании обновлений: версии компонента на клиентах и сервере должны быть совместимы.
Для массовой регистрации на множестве рабочих мест удобно подготовить bat-файл с командой regsvr32 и распространить его через групповые политики или систему удалённого управления. Учтите, что regsvr32 регистрирует компонент для всей машины (при наличии прав администратора), поэтому повторная регистрация под каждым пользователем не требуется.
Подключение зарегистрированного компонента в коде 1С
После регистрации компонент подключается встроенным методом платформы. Для COM-компонентов вызов выглядит так:
Если ПодключитьВнешнююКомпоненту("AddIn.MyComponent") Тогда
Компонент = Новый("AddIn.MyComponent");
Иначе
Сообщить("Не удалось подключить компонент");
КонецЕсли;
В качестве параметра указывается ProgID компонента — его смотрите в документации разработчика. Если ProgID неизвестен, его можно найти в реестре: после регистрации в разделе HKEY_CLASSES_ROOT появится ветка с именем ProgID, а в CLSID — соответствующий идентификатор класса.
Обратите внимание: метод Новый("AddIn...") создаёт объект компонента только после успешного подключения. Если компонент не зарегистрирован, не совпадает разрядность или файл недоступен, ПодключитьВнешнююКомпоненту вернёт Ложь, и дальнейший вызов приведёт к ошибке. Всегда проверяйте результат подключения перед использованием объекта.
Если компонент подключается в тонком клиенте, но не подключается в веб-клиенте — это нормально: COM-компоненты в веб-клиенте работают только через расширение для браузера и с серьёзными ограничениями. Для веб-сценариев переносите вызовы компонента на сервер.
Типичные ошибки регистрации и их устранение
Чаще всего регистрация завершается ошибкой с шестнадцатеричным кодом. Каждый код указывает на конкретную причину, и лечить их нужно по-разному.
| Код ошибки | Причина | Решение |
|---|---|---|
| 0x80070005 | Нет прав администратора | Запустить командную строку от имени администратора |
| 0x8007007E | Не найден модуль или его зависимость | Проверить путь, доустановить зависимые библиотеки (например, Visual C++ Redistributable) |
| 0x80004005 | Несовпадение разрядности или повреждение файла | Использовать regsvr32 нужной разрядности, скачать DLL заново |
| 0x80029C4A | Ошибка загрузки библиотеки типов | Переустановить компонент от поставщика |
Ошибка «не найден указанный модуль» при существующем файле почти всегда означает отсутствие зависимых библиотек. Многие компоненты написаны на C++ и требуют установленного пакета Visual C++ Redistributable соответствующей версии и разрядности. Установите его и повторите регистрацию.
Проверка результата и диагностика
После регистрации проверьте результат на трёх уровнях: в реестре, в системе и в 1С. В реестре откройте regedit и найдите ProgID компонента в HKEY_CLASSES_ROOT — наличие ветки с подразделом CLSID подтверждает регистрацию. Для 32-разрядных компонентов на 64-разрядной системе запись будет в HKEY_CLASSES_ROOT\WOW6432Node.
В 1С выполните тестовый вызов ПодключитьВнешнююКомпоненту с известным ProgID. Если метод возвращает Истина и объект создаётся — регистрация завершена успешно. Если возвращает Ложь, проверьте журнал регистрации и технологический журнал платформы: там фиксируется причина отказа.
Как проверить результат
Окно «DllRegisterServer успешно выполнена»
Окно с кодом ошибки 0x8...
ProgID найден в HKEY_CLASSES_ROOT с подразделом CLSID
Ветка отсутствует или находится не в том разделе разрядности
ПодключитьВнешнююКомпоненту возвращает Истина
Возвращает Ложь, ошибка создания объекта
DLL доступна на чтение для учётной записи службы сервера 1С
Ошибки доступа при вызове на сервере
Альтернативы ручной регистрации
Если вы разрабатываете собственную компоненту или выбираете способ поставки, рассмотрите технологию Native API. Компонент упаковывается в ZIP вместе с файлом manifest.xml, помещается в макет конфигурации и подключается по имени макета — без regsvr32, прав администратора и записей в реестр. Платформа сама выбирает версию DLL под разрядность клиента из состава архива.
Для интеграционных задач иногда проще вообще отказаться от COM: многие функции, ради которых раньше писали внешние компоненты, теперь доступны через HTTP-сервисы, веб-сервисы, COM-соединение с другими приложениями или штатные средства платформы. Это снимает проблему развертывания DLL на десятках рабочих мест.
Способы подключения компонентов
Подходит для готовых сторонних компонентов и драйверов оборудования. Требует прав администратора и контроля разрядности на каждом рабочем месте
Подходит для собственных разработок. Регистрация не нужна, компонент распространяется вместе с конфигурацией, платформа сама выбирает разрядность
Подходит, когда компонент нужен только в серверной логике. Регистрация один раз на сервере вместо всех клиентских машин
Частые вопросы
Нужно ли регистрировать DLL заново после обновления платформы 1С?
Нет. Регистрация выполняется в операционной системе и не зависит от версии платформы. Однако после смены разрядности клиента (переход с 32 на 64 бита) потребуется зарегистрировать версию DLL соответствующей разрядности.
Можно ли зарегистрировать DLL без прав администратора?
Штатный regsvr32 без повышенных прав не запишет данные в HKEY_CLASSES_ROOT. Существуют технологии registration-free COM с манифестами, но они требуют поддержки со стороны самого приложения и для 1С обычно не применяются. Практический путь — выполнить регистрацию один раз под учётной записью администратора.
Почему 1С не видит компонент, хотя regsvr32 сообщил об успехе?
Наиболее вероятная причина — несовпадение разрядности: DLL зарегистрирована как 64-разрядная, а клиент 1С 32-разрядный (или наоборот). Также проверьте, что компонент вызывается там же, где зарегистрирован: серверный код выполняется на сервере, а не на компьютере пользователя.
Как зарегистрировать DLL сразу на многих компьютерах?
Подготовьте bat-файл с командой regsvr32 и полным путём к DLL, разместите саму библиотеку в едином сетевом или локальном каталоге и распространите скрипт через групповые политики (сценарий автозагрузки) или систему управления рабочими станциями. Скрипт должен выполняться от имени администратора.
Что делать, если антивирус блокирует регистрацию компонента?
Убедитесь, что DLL получена от официального поставщика, затем добавьте файл в исключения антивируса или согласуйте регистрацию с отделом информационной безопасности. Отключать антивирус полностью ради регистрации не следует.
Как узнать ProgID зарегистрированного компонента?
ProgID указывается в документации разработчика. Если её нет, откройте реестр и найдите в HKEY_CLASSES_ROOT ветку с именем компонента вида «Имя.Класс» — это и есть ProgID. Либо поищите по имени DLL-файла в разделе CLSID и проследите связанную ветку.
Что важно запомнить
COM-DLL для 1С 8.3 регистрируется через regsvr32 из командной строки с правами администратора, при этом regsvr32 берётся из папки, соответствующей разрядности библиотеки. Компонент регистрируется там, где исполняется код: на клиенте, на сервере или в обоих местах. Успех проверяется записью в реестре и вызовом ПодключитьВнешнююКомпоненту. Для собственных разработок предпочтительна технология Native API, не требующая регистрации вообще.