Иногда, если вы пользователь Windows, вероятно, вам приходилось запускать утилиту regsvr32.exe
для “регистрации DLL-файла”. Если это так, вероятно, вы не знали точно, что происходит под капотом. Эта загадочная утилита используется для управления элементами управления объектами и встраивания (OLE) , которые используют многие приложения Windows.
Но что такое элемент управления OLE и зачем его регистрировать? В этом руководстве вы узнаете много способов установки, удаления, регистрации или отмены регистрации элемента управления OLE с помощью утилиты regsvr32.exe
.
Предварительные требования
Убедитесь, что у вас есть необходимые требования, чтобы следовать за выполнением утилиты regsvr32.exe
:
- Поскольку утилита regsvr32.exe встроена в большинство версий Windows, вам нужен только компьютер с Windows и учетной записью администратора.
- Вам понадобится PowerShell 7, чтобы воспользоваться скриптом PowerShell, включенным в этом руководстве.
Что такое элементы управления OLE?
Прежде чем вы узнаете, как использовать утилиту regsvr32.exe
, вам необходимо иметь простое представление о том, что управляет этим инструментом, элементы управления OLE.
Контроли OLE – это технология, специфичная для Windows, разработанная для упрощения встраивания и связывания документов и других объектов. Эта технология развивалась на протяжении многих лет, и на ее основе были созданы различные компоненты.
Возможно, вы слышали о Модели объектов компонентов (COM), Распределенной модели объектов компонентов (DCOM) или контролах ActiveX. Каждая из этих технологий либо построена на основе, либо является расширением технологии OLE, которая определяет стандартный интерфейс для функций, написанных на множестве различных языках.
ActiveX устарел, но все еще доступен через Internet Explorer в Windows 10, но не в Microsoft Edge.
Регистрация контролов OLE
Теперь, когда вы понимаете, что делает утилита regsvr32.exe
, пришло время зарегистрировать контрол OLE, и существует несколько вариантов команд для этого. Выберите один из вариантов команды ниже или просто попробуйте каждый из них.
Вы можете зарегистрировать контроли OLE с помощью PowerShell или командной строки Windows. В любом случае убедитесь, что вы запускаете командную строку от имени администратора, чтобы гарантировать правильную регистрацию контрола.
Отображение результата в графическом интерфейсе (GUI)
Регистрация DLL с использованием regsvr32
, в самом простом случае, включает передачу пути к DLL инструменту. По умолчанию regsvr32
отобразит всплывающее окно, указывающее на успешность (или неудачу). Чтобы зарегистрировать DLL, укажите имя или полный путь к DLL, как показано ниже.
Запуск команды ниже создаст необходимые классы реестра для целевого элемента управления OLE в ключе HKEY_CLASSES_ROOT\CLSID для экземпляров x64 или HKEY_CLASSES_ROOT\WOW6432Node\CLSID для экземпляров x86.
При успехе вы увидите результат в виде графического интерфейса, указывающего, что DllRegisterServer
прошел успешно.

При регистрации элемента управления OLE
regsvr32.exe
применяет системный путь поиска. Поэтому, если вам нужно зарегистрировать конкретный файл за пределами этого пути, лучше указать абсолютный путь к файлу.
Регистрация элемента управления OLE молча
Когда вы выполняете команды, не всегда удобно видеть всплывающий запрос. Давайте рассмотрим, как подавить любой всплывающий запрос при регистрации элемента управления OLE.
Чтобы подавить всплывающие запросы, выполните regsvr32
, за которым следует имя DLL (msxml3.dll
) и переключатель /s
для тихой регистрации элемента управления OLE. Единственным недостатком этой команды является подавление любых сообщений об ошибках.
Существует недокументированный переключатель,
/e
, который подавляет только сообщение об успешном выполнении в графическом интерфейсе, но отображает сообщение об ошибке — умно!

Регистрация OLE-контроллера и указание действия установки
При указании DLL для регистрации OLE вы вызываете только метод DllRegisterServer
, но бывают случаи, когда вам нужно выполнить действие после регистрации. Для этого вы можете указать параметр /i
.
Например, вы можете передать строку ввода (U
) параметру /i
, который вызовет метод DllInstall
и метод DllRegisterServer
одновременно.
Метод
DllInstall
позволяет утилитеregsvr32.exe
устанавливать DLL несколькими способами и вызывать различные действия для одной DLL.

Указание действия установки без вызова метода DllRegisterServer
Возможно, вам просто нужно установить OLE-контроллер без повторной регистрации его. Если это так, выполните следующую команду.
Вышеупомянутая команда использует параметр /n
, чтобы предотвратить вызов метода DllRegisterServer
для DLL shell32.dll в методе установки DllInstall.

Отмена регистрации OLE-контроллера с помощью regsvr32.exe
Если вы успешно зарегистрировали OLE-контроллер без ошибок, то это облегчает. Но может возникнуть ситуация, когда вам нужно удалить OLE-контроллер, когда он конфликтует с другими. К счастью, regsvr32.exe
позволяет отменить регистрацию и удалить OLE-контроллер.
Чтобы отменить регистрацию и удалить элемент управления, выполните команду regsvr32.exe
и передайте параметр /u
, чтобы отменить регистрацию OLE-элемента управления. Вы можете видеть в результатах GUI ниже, что DLL-библиотека msxml3.dll была успешно удалена.
Чтобы выполнить действие вместе с отменой регистрации, передайте строку действия (
U
) параметру/i
. Затем командаregsvr32
вызовет методDllInstall
с этим действием в качестве деинсталляции, например:regsvr32 /i:action /U msxml3.dll
.

Обработка ошибок для regsvr32.exe
Вы успешно зарегистрировали OLE-элементы управления, но что делать, если при выполнении команды регистрации возникает ошибка? Существует несколько ошибок, которые могут появиться при управлении элементами управления. Эти сообщения могут быть иногда криптичными, но ниже разбиты, чтобы вы знали, что вызывает их появление.
FAIL_ARGS | ⦿ “Unrecognized flag” ⦿ “Extra argument on command line” ⦿ “This command is only valid when an OLE Custom Control project is open” ⦿ “No DLL name specified” |
Implies that a command-line argument was incorrect. |
FAIL_OLE | “OleInitialize failed” | Implies that there was an error in properly initializing the OLE subsystem. |
FAIL_LOAD | “LoadLibary(<dllname) failed>“ | This can be a host of reasons such as a dependent library missing, the DLL is inaccessible due to permissions, or the file is missing. |
FAIL_ENTRY | ⦿ ” was loaded, but the entry point was not found. does not appear to be an .DLL or .OCX file” ⦿ ” was loaded, but the entry point was not found. may not be exported or a corrupt version may be in memory. Consider using PView to detect and remove it.” ⦿ ” was loaded, but the entry point was not found. may not be exported, or a corrupt version may be in memory. Consider using WPS to detect and remove it.” |
Implies that the entry point in the DLL, or function name, is missing. |
FAIL_REG | “<DLLEntryPoint> in <DLLName> failed“ | Implies that despite all the prior steps completing the system still failed to fully register the DLL. |
Расширение утилиты regsvr32.exe
с помощью PowerShell
Поскольку regsvr32.exe
предпочитает графический интерфейс, автоматизация может быть вызовом к вызову. Чтобы избежать этой сложности, вы можете обернуть утилиту regsvr32.exe
в функцию PowerShell. Создав функцию PowerShell, вы сможете выполнять regsvr32.exe
так, как если бы это была встроенная команда PowerShell.
Как пример, ознакомьтесь с функцией PowerShell Invoke-RegSvr32
ниже. Эта функция вызывает утилиту regsvr32
и использует PowerShell для захвата кода выхода и его соответствующей обработки. И, применяя проверку аргумента заранее, вы даже можете избежать ошибок вообще!
Чтобы экспериментировать с приведенной ниже функцией, откройте новую консоль PowerShell и скопируйте код в нее. Затем вы сможете вызвать функцию, как показано ниже.
Ниже вы найдете несколько примеров того, как использовать функцию Invoke-RegSvr32
.

Invoke-RegSvr32
PowerShell CommandЗаключение
К настоящему моменту вы научились регистрировать и удалять DLL, а также обрабатывать ошибки. Хотя regsrv32.exe
может не использоваться так часто в повседневных задачах, иногда вам все же может понадобиться зарегистрировать или удалить DLL.
Чтобы уйти еще дальше, вы можете расширить функционал PowerShell, чтобы учитывать еще больше проверок и крайних случаев. Вы даже можете создать функцию PowerShell для списка зарегистрированных элементов управления в реестре CLSID
!