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

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

Как зарегистрировать DLL для 1С через regsvr32

Как зарегистрировать DLL для 1С через regsvr32: команды, права администратора, разрядность 32/64 бита, ошибки 0x80004005 и способы их устранения.

Компоненты 1С — внешние печатные формы, драйверы торгового оборудования, COM-объекты интеграции — часто поставляются в виде DLL-библиотек, которые Windows должна «узнать» до первого вызова. Пока библиотека не прописана в системном реестре, 1С при попытке создать COM-объект выдаёт ошибку вида «Невозможно создать объект» или «Класс не зарегистрирован». Стандартный способ регистрации — системная утилита regsvr32.

Регистрация сводится к одной команде, но на практике большинство проблем связано не с самой командой, а с окружением: разрядностью Windows и 1С, правами пользователя, путём к файлу и зависимостями самой библиотеки. Ниже разобран полный порядок действий — от подготовки до проверки результата и устранения типовых ошибок.

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

Что такое regsvr32 и зачем регистрировать DLL для 1С

Regsvr32 — встроенная утилита Windows, которая вызывает из DLL функцию DllRegisterServer и записывает сведения о COM-классах библиотеки в системный реестр: идентификаторы CLSID, ProgID, пути к файлу. После этого любое приложение, включая 1С, может создать объект по имени, например через Новый COMОбъект("AddIn.Scanner").

Без регистрации Windows не знает, где лежит библиотека и какие классы она экспортирует. Типичный сценарий в 1С: обработка подключения торгового оборудования обращается к драйверу, получает отказ «Класс не зарегистрирован» — и единственное, что требуется, это зарегистрировать соответствующую DLL.

Важно понимать: regsvr32 работает только с COM-библиотеками (ActiveX). Обычные DLL без точки входа DllRegisterServer зарегистрировать нельзя — утилита вернёт ошибку, и это нормальное поведение, а не поломка файла.

Подготовка: права, разрядность и расположение файла

Перед регистрацией убедитесь в трёх вещах. Во-первых, у вас должны быть права локального администратора: regsvr32 пишет в ветку реестра HKEY_LOCAL_MACHINE, и без повышенных прав команда завершится ошибкой. Во-вторых, определите разрядность DLL — 32 или 64 бита. В-третьих, положите файл в постоянное расположение: после регистрации перемещать или удалять его нельзя, иначе ссылки в реестре станут битыми.

Хорошая практика — складывать регистрируемые библиотеки в отдельный каталог без пробелов и кириллицы в пути, например C:\1C_Components\. Пробелы сами по себе не мешают (путь берётся в кавычки), но кириллица иногда вызывает проблемы у старых компонентов.

Узнать разрядность DLL можно сторонними утилитами (например, просмотром заголовков PE-файла) или косвенно — из документации поставщика драйвера. Правило простое: разрядность DLL должна совпадать с разрядностью клиентского приложения 1С, которое будет её вызывать.

Пошаговая регистрация DLL через regsvr32

Базовая процедура одинакова для любой COM-библиотеки. Откройте командную строку от имени администратора: нажмите «Пуск», введите cmd, щёлкните правой кнопкой по «Командная строка» и выберите «Запуск от имени администратора». Затем выполните команду регистрации.

Порядок действий
  1. 1
    Скопируйте DLL в постоянный каталог, например C:\1C_Components\
  2. 2
    Откройте командную строку от имени администратора
  3. 3
    Выполните: regsvr32 "C:\1C_Components\driver.dll"
  4. 4
    Дождитесь окна об успешном выполнении DllRegisterServer
  5. 5
    Перезапустите клиент 1С и проверьте создание COM-объекта
cmd
regsvr32 "C:\1C_Components\driver.dll"

Успешный результат — диалоговое окно «DllRegisterServer in ... succeeded» или аналогичное сообщение на русском языке. Если команда запускается из скрипта и окна нежелательны, добавьте ключ /s (тихий режим), но в этом случае ошибки тоже будут скрыты — проверяйте код возврата.

Отмена регистрации

Если библиотеку нужно убрать — например, перед установкой новой версии драйвера — используйте ключ /u: regsvr32 /u "C:\1C_Components\driver.dll". Утилита вызовет DllUnregisterServer и удалит записи из реестра. После этого файл можно перемещать или удалять.

Разрядность: regsvr32 в 64-разрядной Windows

Главный подводный камень темы. В 64-разрядной Windows существуют две копии regsvr32: 64-битная в C:\Windows\System32 и 32-битная в C:\Windows\SysWOW64. Названия каталогов контринтуитивны: System32 содержит 64-битные утилиты, а SysWOW64 — 32-битные.

Большинство драйверов торгового оборудования для 1С — 32-разрядные, потому что долгое время клиент 1С был только 32-битным. Если вы запускаете 32-битный клиент 1С на 64-разрядной Windows, регистрировать DLL нужно явно через 32-битную версию утилиты:

cmd
C:\Windows\SysWOW64\regsvr32.exe "C:\1C_Components\driver.dll"

Если же используется 64-разрядный клиент 1С, потребуется 64-битная версия драйвера, и регистрируется она обычной командой regsvr32 из System32. Несовпадение разрядности — самая частая причина ситуации, когда «всё зарегистрировалось успешно, а 1С объект не видит»: записи оказались не в том разделе реестра.

Сравнение вариантов

32-битный клиент 1С + 32-битная DLL

Регистрация через C:\Windows\SysWOW64\regsvr32.exe. Самый распространённый сценарий для драйверов оборудования.

64-битный клиент 1С + 64-битная DLL

Регистрация стандартной командой regsvr32. Требуется 64-битная версия драйвера от поставщика.

64-битный клиент + 32-битная DLL

Работать не будет: процесс не может загрузить библиотеку другой разрядности. Нужна 64-битная версия компонента.

Типичные ошибки regsvr32 и их устранение

Ошибка 0x80004005 при регистрации почти всегда означает нехватку прав — командная строка запущена без повышения. Закройте окно и перезапустите его от имени администратора. Если права есть, а ошибка остаётся, проверьте, не блокирует ли файл антивирус или политика безопасности.

Сообщение «Модуль загружен, но точка входа DllRegisterServer не найдена» говорит о том, что файл не является COM-библиотекой. Такие DLL подключаются в 1С иначе — как внешние компоненты по технологии Native API через ПодключитьВнешнююКомпоненту(), и regsvr32 здесь не поможет.

Ошибка «Не удалось загрузить модуль» при существующем файле обычно означает отсутствие зависимостей: сама DLL требует других библиотек (например, Visual C++ Redistributable), которых нет в системе. Установите пакет зависимостей от поставщика и повторите регистрацию.

Типичные ошибки
01
Регистрация 32-битной DLL через 64-битный regsvr32 — записи попадают не в тот раздел реестра, и 1С не видит класс
02
Запуск cmd без прав администратора — ошибка 0x80004005
03
Регистрация из временной папки или с рабочего стола — после перемещения файла ссылки в реестре ломаются
04
Попытка зарегистрировать Native API компоненту через regsvr32 — ошибка отсутствия точки входа
05
Регистрация на сервере, когда драйвер нужен на клиентских машинах — COM-объект создаётся там, где выполняется код

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

После успешной регистрации перезапустите 1С и проверьте создание объекта. Быстрый способ — выполнить в консоли кода или через обработку: Ком = Новый COMОбъект("ProgID.Компоненты"). Если объект создался без исключения — регистрация работает.

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

Контрольные точки

Как проверить результат

Сообщение regsvr32
Норма

Окно об успешном выполнении DllRegisterServer

Тревожный признак

Код ошибки 0x80004005 или «точка входа не найдена»

Создание объекта в 1С
Норма

COMОбъект создаётся без исключения

Тревожный признак

Ошибка «Класс не зарегистрирован» — неверная разрядность или регистрация не на той машине

Записи в реестре
Норма

ProgID присутствует в нужном разделе (WOW6432Node для 32-бит на x64)

Тревожный признак

Записей нет или они в другом разделе реестра

Для массовой регистрации на нескольких рабочих местах удобно подготовить bat-файл с явным вызовом нужной версии regsvr32 и распространить его через групповые политики или систему управления. В скрипте используйте тихий режим /s и логируйте код возврата, чтобы отловить машины, где регистрация не прошла.

Маршрут решения

Как выбрать действие

1С пишет «Класс не зарегистрирован» при подключении оборудованияЗарегистрируйте DLL драйвера на этом рабочем месте через regsvr32 нужной разрядности
Regsvr32 сообщает, что точка входа DllRegisterServer не найденаЭто не COM-библиотека — подключайте её как внешнюю компоненту Native API внутри 1С
Регистрация успешна, но объект не создаётсяПроверьте совпадение разрядности DLL и клиента 1С, а также машину, на которой выполняется код
Нужно обновить драйвер до новой версииСначала выполните regsvr32 /u для старой DLL, затем зарегистрируйте новую

FAQ

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

Штатный regsvr32 пишет в HKEY_LOCAL_MACHINE, поэтому права администратора обязательны. Обходной путь — регистрация COM-классов в разделе HKEY_CURRENT_USER вручную через файл .reg, но это требует точного знания CLSID и ProgID компонента и поддерживается не всеми библиотеками.

Почему после успешной регистрации 1С всё равно не видит компонент?

Чаще всего причина в разрядности: 32-битная DLL зарегистрирована 64-битной утилитой или наоборот. Вторая причина — код выполняется на другой машине (на сервере 1С), где библиотека не зарегистрирована. Проверьте, где именно исполняется вызов COMОбъекта.

Чем отличается регистрация через regsvr32 от подключения внешней компоненты в 1С?

Regsvr32 регистрирует COM-библиотеки в Windows, и 1С обращается к ним через COMОбъект. Внешние компоненты Native API подключаются встроенной командой ПодключитьВнешнююКомпоненту() напрямую из файла или макета, без записи в реестр Windows, и кроссплатформенно.

Нужно ли перезагружать компьютер после регистрации DLL?

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

Как узнать, какие DLL уже зарегистрированы в системе?

Единого списка нет, но сведения хранятся в реестре: в ветке HKEY_CLASSES_ROOT\CLSID (и в HKEY_CLASSES_ROOT\WOW6432Node\CLSID для 32-битных компонентов на 64-разрядной системе). По известному ProgID можно найти CLSID и путь к файлу библиотеки.

Безопасно ли регистрировать DLL из интернета?

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

Итог

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

Регистрация DLL для 1С выполняется командой regsvr32 из командной строки с правами администратора. Ключевые условия успеха: совпадение разрядности DLL и клиента 1С, правильная версия regsvr32 (SysWOW64 для 32-битных библиотек на x64), постоянное расположение файла и регистрация именно на той машине, где выполняется код.