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

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

Как зарегистрировать 64-битную DLL для 1С через regsvr32

Пошаговая инструкция регистрации 64-разрядной DLL для 1С через regsvr32: права администратора, SysWOW64 и System32, типовые ошибки и способы проверки результата.

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

Ключевой момент: в 64-разрядной Windows существуют две копии regsvr32 — 64-битная в папке System32 и 32-битная в папке SysWOW64. Именование папок контринтуитивно и является главным источником ошибок. Клиент 1С 64-bit может загружать только 64-битные COM-компоненты, а 32-битный клиент — только 32-битные, даже если оба запущены на одной и той же 64-разрядной ОС.

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

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

Типичные компоненты, которые приходится регистрировать вручную: драйверы торгового оборудования (сканеры, ККТ, весы), компоненты криптопровайдеров, библиотеки обмена с банками и весовыми терминалами, самописные COM-объекты. Установщики многих из них рассчитаны на 32-битную среду и не регистрируют 64-битную версию автоматически — отсюда и необходимость ручной регистрации.

Разрядность: System32 против SysWOW64

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

Клиент 1СРазрядность DLLПуть к regsvr32
64-битный64-битнаяC:\Windows\System32\regsvr32.exe
32-битный32-битнаяC:\Windows\SysWOW64\regsvr32.exe

Узнать разрядность установленного клиента 1С можно в диспетчере задач: 32-битный процесс помечается как «32 бита» на вкладке «Подробности», либо по пути установки — 64-битная платформа обычно ставится в «C:\Program Files\1cv8», а 32-битная в «C:\Program Files (x86)\1cv8». Разрядность самой DLL можно проверить утилитами просмотра PE-заголовков или через свойства, если поставщик указывает её в документации.

Пошаговая регистрация 64-битной DLL

Процедура занимает пару минут, но требует прав администратора — без них запись в реестр будет отклонена, причём иногда без явного сообщения об ошибке прав.

Порядок действий
  1. 1
    Скопируйте DLL в постоянную папку без русских букв и пробелов в пути, например C:\Components\ — после регистрации файл нельзя перемещать и удалять.
  2. 2
    Откройте командную строку от имени администратора: Пуск → введите cmd → «Запуск от имени администратора».
  3. 3
    Выполните команду: C:\Windows\System32\regsvr32.exe "C:\Components\MyComponent.dll"
  4. 4
    Дождитесь окна «DllRegisterServer in ... succeeded» — это признак успешной регистрации.
  5. 5
    Перезапустите клиент 1С и проверьте создание объекта.
cmd
C:\Windows\System32\regsvr32.exe "C:\Components\MyComponent.dll"

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

Регистрация 32-битной DLL для 32-битного клиента

Если 64-битной версии компоненты не существует (что часто бывает со старыми драйверами оборудования), единственный рабочий вариант — использовать 32-битный клиент 1С. В этом случае регистрация выполняется 32-битной копией regsvr32 из папки SysWOW64:

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

Учтите ограничение: 32-битный клиент не сможет работать с 64-битными компонентами и наоборот. Если в одной базе используются обе разрядности компонент, придётся либо искать 64-битные версии всех библиотек, либо оставаться на 32-битном клиенте. Для сервера 1С 64-bit с COM-вызовами на стороне сервера 32-битная компонента не подойдёт в принципе.

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

64-битная DLL + System32\regsvr32

Правильный путь для 64-битного клиента и сервера 1С. Ограничение: требуется 64-битная версия компоненты от поставщика.

32-битная DLL + SysWOW64\regsvr32

Подходит для 32-битного клиента 1С, единственный вариант для старых драйверов. Не работает с 64-битным клиентом и сервером.

Реализация через внешнюю компоненту Native API

Компонента подключается из макета/файла без регистрации в реестре. Подходит, если поставщик предоставляет такой вариант поставки.

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

Ошибка «The module failed to load» (0x8007007E) чаще всего означает, что у DLL есть зависимости — другие библиотеки, которых нет в системе, например распространяемые пакеты Visual C++ Redistributable. Ошибка 0x80070005 указывает на нехватку прав: командная строка запущена без повышения. Сообщение «was loaded but the entry-point DllRegisterServer was not found» говорит, что файл не является регистрируемой COM-библиотекой — возможно, это обычная DLL или компонента Native API, которую регистрировать не нужно.

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

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

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

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

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

Окно результата regsvr32
Норма

Сообщение «DllRegisterServer ... succeeded»

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

Код ошибки 0x8007... или «entry-point not found»

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

Новый COMОбъект выполняется без исключения

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

Ошибка «Класс не зарегистрирован» или «-2147221164»

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

CLSID компоненты есть в HKCR\CLSID (для 32-битной — в Wow6432Node)

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

Раздел отсутствует или находится не в той ветке разрядности

Дополнительно можно посмотреть реестр вручную через regedit: 64-битные классы находятся в HKEY_CLASSES_ROOT\CLSID, а 32-битные на 64-битной ОС — в HKEY_CLASSES_ROOT\Wow6432Node\CLSID. Наличие записи с правильным путём к файлу в InprocServer32 подтверждает регистрацию.

Если regsvr32 не помогает: альтернативы

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

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

Компонента — внешняя по технологии Native API (поставляется как zip или dll для подключения)Не регистрируйте её через regsvr32 — подключайте методом ПодключитьВнешнююКомпоненту в 1С
64-битной версии DLL не существуетИспользуйте 32-битный клиент 1С либо запросите у поставщика 64-битную сборку
Ошибка загрузки модуля при регистрацииУстановите зависимости (Visual C++ Redistributable нужной версии) и проверьте разрядность DLL
Компонент нужен только на сервере 1СРегистрируйте на сервере и выдайте права на папку учётной записи агента сервера

Отдельный случай — внешние компоненты Native API, которые 1С подключает напрямую из файла или макета без регистрации в реестре. Такие библиотеки регистрировать через regsvr32 не нужно и невозможно: в них нет точки входа DllRegisterServer. Если поставщик даёт и COM, и Native API версии, для 64-битного сервера обычно удобнее Native API — она избавляет от вопросов разрядности реестра и прав на регистрацию.

Держите все зарегистрированные компоненты в одной выделенной папке с понятными именами версий и ведите список того, что и где зарегистрировано. При обновлении Windows, миграции сервера или переустановке платформы это сэкономит часы на восстановление работоспособности обменов и оборудования.
ПЗ
Практическое замечание

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

Нужно ли регистрировать DLL заново после обновления платформы 1С?

Нет, регистрация COM-компоненты хранится в реестре Windows и не зависит от версии платформы. Перерегистрация требуется только при замене самого файла DLL на новую версию, изменении его расположения или переустановке ОС.

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

Штатный regsvr32 пишет в HKEY_CLASSES_ROOT, что требует повышенных прав. Существует техника регистрации COM для текущего пользователя через ветку HKCU\Software\Classes, но стандартная утилита её не выполняет — нужны сторонние средства или ручное внесение записей, что на практике применяется редко.

Почему 1С пишет «Класс не зарегистрирован», хотя regsvr32 сообщил об успехе?

Почти всегда это несовпадение разрядности: DLL зарегистрирована как 32-битная, а клиент 1С — 64-битный, или наоборот. Проверьте, какой копией regsvr32 выполнялась регистрация, и разрядность клиента в диспетчере задач.

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

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

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

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

Чем отличается regsvr32 от regasm?

Regsvr32 регистрирует классические COM-библиотеки, написанные на неуправляемом коде. Regasm применяется для сборок .NET, которые экспонируют COM-интерфейсы. Если компонента написана на .NET, используйте regasm с учётом разрядности, а не regsvr32.

Итог

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

Разрядность клиента 1С, DLL и копии regsvr32 должна совпадать: 64-битную библиотеку регистрируйте через System32\regsvr32, 32-битную — через SysWOW64\regsvr32, всегда от имени администратора. После регистрации не перемещайте файл и проверяйте результат созданием COMОбъекта в 1С.