Em certos momentos, se você é um usuário do Windows, é provável que você já tenha precisado executar o utilitário regsvr32.exe
para “registrar uma DLL”. Se sim, você provavelmente não estava ciente do que exatamente estava acontecendo nos bastidores. Este utilitário críptico é usado para gerenciar controles de Object Linking and Embedding (OLE) que muitos aplicativos do Windows utilizam.
Mas o que exatamente é um controle OLE e por que você gostaria de registrar um controle OLE? Neste tutorial, você aprenderá as muitas maneiras de instalar, desinstalar, registrar ou cancelar o registro de um controle OLE com o utilitário regsvr32.exe
.
Pré-requisitos
Assegure-se de ter os requisitos abaixo para seguir executando o utilitário regsvr32.exe
:
- Como o utilitário regsvr32.exe está incorporado na maioria das versões do Windows, você só precisa de um computador Windows com uma conta de administrador.
- Você precisará do PowerShell 7 para aproveitar o script do PowerShell incluído neste tutorial.
O que são Controles OLE?
Antes de aprender como usar o utilitário regsvr32.exe
, você deve primeiro ter uma compreensão rudimentar do que essa ferramenta gerencia, controles OLE.
OLE controls são uma tecnologia específica do Windows desenvolvida para facilitar a incorporação e a vinculação a documentos e outros objetos. Essa tecnologia evoluiu ao longo dos anos, e diferentes componentes foram construídos sobre a tecnologia OLE.
Você pode ter ouvido falar do Component Object Model (COM), Distributed Component Object Model (DCOM), ou controles ActiveX. Cada uma dessas tecnologias é construída sobre a tecnologia OLE ou é uma extensão dela, definindo uma interface padrão para funções escritas em várias linguagens diferentes.
O ActiveX está obsoleto, mas ainda disponível via Internet Explorer no Windows 10, porém não no Microsoft Edge.
Registrando Controles OLE
Agora que você entende o que a utilidade regsvr32.exe
faz, é hora de registrar um controle OLE, e existem várias variantes de comando para fazer isso. Sinta-se à vontade para escolher uma variante de comando abaixo ou simplesmente tentar cada uma.
Você pode registrar controles OLE via PowerShell ou prompt de comando do Windows. De qualquer forma, certifique-se de estar executando sua linha de comando como administrador para garantir que o controle seja registrado corretamente.
Exibindo um Resultado de GUI
Registrando um DLL com regsvr32
, no caso de uso mais simples, envolve passar o caminho do DLL para a ferramenta. Por padrão, o regsvr32
exibirá um pop-up indicando sucesso (ou falha). Para registrar um DLL, forneça o nome ou o caminho completo do DLL conforme mostrado abaixo.
Executar o comando abaixo criará as classes de registro necessárias para o controle OLE alvo na chave HKEY_CLASSES_ROOT\CLSID para instâncias x64 ou HKEY_CLASSES_ROOT\WOW6432Node\CLSID para instâncias x86.
Após o sucesso, você verá um resultado de GUI observando que DllRegisterServer
foi bem-sucedido.

Ao registrar um controle OLE,
regsvr32.exe
aplicará o caminho de busca do sistema. Portanto, se você precisar registrar um arquivo específico fora desse caminho, é melhor especificar o caminho absoluto para o arquivo.
Registrando um Controle OLE Silenciosamente
Quando você está executando comandos, nem sempre é desejável que um prompt de GUI seja exibido. Então, vamos ver como você pode suprimir qualquer prompt de GUI ao registrar um controle OLE.
Para suprimir prompts de GUI, execute o regsvr32
seguido pelo nome do DLL (msxml3.dll
) e o switch /s
para registrar o controle OLE silenciosamente. A única desvantagem deste comando é que você também estará suprimindo quaisquer mensagens de erro.
Um switch não documentado,
/e
, existe, que suprime apenas a mensagem de sucesso de GUI, mas mostra a mensagem de erro de GUI – inteligente!

Registrando um Controle OLE e Especificando uma Ação de Instalação
Ao especificar uma DLL para um registro OLE, você está apenas chamando o método DllRegisterServer
, mas há momentos em que você precisa tomar uma ação após o registro. Para fazer isso, você pode especificar o parâmetro /i
.
Por exemplo, você pode passar uma string de entrada (U
) para o parâmetro /i
, que invocará o método DllInstall
e o método DllRegisterServer
simultaneamente.
O método
DllInstall
permite que a utilidaderegsvr32.exe
instale uma DLL de várias maneiras e invoque várias ações para uma DLL.

Especificando uma Ação de Instalação Sem Chamar o Método DllRegisterServer
Talvez você queira apenas instalar um controle OLE sem registrá-lo novamente. Se for o caso, execute o seguinte comando.
O comando acima usa o parâmetro /n
para evitar a chamada do método DllRegisterServer
para a DLL shell32.dll no método de instalação, DllInstall.

Desregistrando um Controle OLE com regsvr32.exe
Se você passou pelo registro de um controle OLE sem erros, então é um alívio. Mas pode haver momentos em que você precisa desinstalar um controle OLE quando está conflitando com outros. Felizmente, regsvr32.exe
oferece a capacidade de desregistrar e desinstalar um controle OLE.
Para cancelar o registro e desinstalar um controle, execute o regsvr32.exe
e passe o parâmetro /u
para cancelar o registro do controle OLE. Você pode ver no resultado da GUI abaixo que o DLL msxml3.dll foi desinstalado com sucesso.
Para executar uma ação junto com o cancelamento do registro, passe a string de ação (
U
) para o parâmetro/i
. Então, o comandoregsvr32
chamará o métodoDllInstall
com essa ação como uma desinstalação, assim:regsvr32 /i:action /U msxml3.dll
.

Tratamento de Erros para regsvr32.exe
Você já teve sucesso ao registrar controles OLE, mas e se o comando de registro encontrar um erro? Existem alguns erros que podem aparecer ao tentar gerenciar controles. Essas mensagens podem ser criptografadas às vezes, mas estão detalhadas abaixo para informar sobre suas causas.
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. |
Ampliando a Utilidade regsvr32.exe
com PowerShell
Como o regsvr32.exe
prefere a saída da GUI, a automação pode ser um desafio. Para superar esse desafio, você pode encapsular a utilidade regsvr32.exe
em uma função do PowerShell. Ao criar uma função do PowerShell, você pode executar o regsvr32.exe
como se fosse um cmdlet nativo do PowerShell.
Como exemplo, confira abaixo a função PowerShell Invoke-RegSvr32
. Esta função invoca a utilidade regsvr32
e usa o PowerShell para capturar o código de saída e processá-lo conforme necessário. E ao aplicar uma validação de argumento com antecedência, você pode até evitar erros por completo!
Para experimentar a função abaixo, abra um novo console do PowerShell e copie e cole o código nele. Em seguida, você poderá invocar a função conforme mostrado abaixo.
Abaixo, você encontrará alguns exemplos de como usar a função Invoke-RegSvr32
.

Invoke-RegSvr32
PowerShell CommandConclusão
Agora, você aprendeu a lidar com o registro e desregistro de DLLs e a lidar com erros. Embora regsrv32.exe
não seja usado tanto nas tarefas do dia a dia, há momentos em que você precisa registrar ou desregistrar uma DLL.
Para expandir isso ainda mais, você pode aprimorar o PowerShell para lidar com ainda mais verificações e casos especiais. Você pode até criar uma função PowerShell para listar os controles registrados na localização do registro CLSID
!