Vendo que esta questão está marcada como "vb.net", eu tenho que me perguntar por que você está tentando registrar uma DLL que você criou no VB.NET. Para ser usado com regsvr32, uma DLL deve exportar as funções DllRegisterServere DllUnregisterServer. Não há registro para a grande maioria das DLLs que você cria.
Cody Gray
12
O que você quer dizer com não funciona ou não é útil? Você recebeu uma mensagem de erro? O que isso quer dizer?
Cody Gray
Respostas:
68
Digite regsvr32 name.dllno Prompt de Comando (executado em modo elevado!) E pressione “Enter”. Observe que name.dlldeve ser substituído pelo nome da DLL que você deseja registrar. Por exemplo, se você deseja registrar o iexplore.dll, digite regsvr32 iexplore.dll.
Esse comportamento ocorre porque o arquivo Regsvr32.exe na pasta System32 é uma versão de 64 bits. Quando você executa o Regsvr32 para registrar uma DLL, está usando a versão de 64 bits por padrão.
Solução desse artigo:
Para resolver esse problema, execute o Regsvr32.exe da pasta% SystemRoot% \ Syswow64. Por exemplo, digite os seguintes comandos para registrar a DLL:
cd \windows\syswow64regsvr32 c:\filename.dll
Esta realmente deveria ser a resposta correta. Posso entender que em sua postagem original a sintaxe estava incorreta, mas Rajkumar comentou que estava recebendo uma mensagem de erro mesmo usando a sintaxe correta. Isso leva duas etapas para a resposta correta para alguém que está pesquisando, em vez de uma. Primeiro para a resposta selecionada como correta, depois seguindo a cadeia de comentários, terminando neste post.
Rob
102
Se a DLL for de 32 bits:
Copie a DLL para C: \ Windows \ SysWoW64 \
Em um prompt de comando elevado :%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll
se a DLL for 64 bits:
Copie a DLL para C: \ Windows \ System32 \
Em um prompt de comando elevado :%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll
Eu sei que parece o caminho errado, mas é assim que funciona. Vejo:
http://support.microsoft.com/kb/249873
Citação: "Nota Em uma versão de 64 bits de um sistema operacional Windows, existem duas versões do arquivo Regsv32.exe:
A versão de 64 bits é% systemroot% \ System32 \ regsvr32.exe.
A versão de 32 bits é% systemroot% \ SysWoW64 \ regsvr32.exe.
"
+1 para "Eu sei que parece ser o contrário, mas é assim que funciona" com link para support.microsoft.com ... sem o link, é difícil de acreditar.
Trevor Boyd Smith
6
"Em cmd elevado" é muito importante !!
shindigo
4
Não acho que tenhamos que copiá-lo para a pasta system32 ou syswow64. Basta registrar o arquivo onde quer que esteja.
Nikos
30
Em um sistema x64, system32 é para 64 bits e syswow64 é para 32 bits (não o contrário, conforme declarado em outra resposta). WOW (Windows no Windows) é o subsistema de 32 bits executado no subsistema de 64 bits).
É uma bagunça em termos de nomenclatura e serve apenas para confundir, mas é assim que as coisas são.
Novamente ...
syswow64 é de 32 bits, NÃO 64 bits.
system32 é de 64 bits, NÃO 32 bits.
Há um regsrv32 em cada um desses diretórios. Um é de 64 bits e o outro de 32 bits. É a mesma coisa com odbcad32 e et al. (Se você quiser ver drivers ODBC de 32 bits que não aparecerão com o odbcad32 padrão no system32, que é de 64 bits.)
Por que isso Importa? regsvr32cuidará dos detalhes, teoricamente detectará se você está registrando uma DLL de 32 ou 64 bits: stackoverflow.com/questions/18935163/…
Sk8erPeter
8
Abra o menu iniciar e digite cmd na caixa de pesquisa Segure Ctrl + Shift e pressione Enter
Isso executa o Prompt de Comando no modo Administrador.
Se você já copiou o filename.dll para a pasta syswow64 e alterou o diretório de trabalho para syswow64 no prompt de comando, então o "c: \" em "regsvr32 c: \ filename.dll" não é necessário. Em suma, "regsvr32 c: \ nomedoarquivo.dll" deve ser "regsvr32 nomedoarquivo.dll"
Tudo aqui estava falhando no caminho errado. Então me lembrei de um truque dos velhos tempos do Win95. Abra a pasta do programa onde reside o .dll, abra C: / Windows / System32, role para baixo até regsvr32 e arraste e solte a dll da pasta do programa para rgsrver32. Boom, pronto.
isso funciona, mas pode ser problemático se você precisar executá-lo como administrador.
workabyte
3
Saber a mensagem de erro seria bastante valioso. Destina-se a fornecer informações, embora não faça sentido para você, faz para nós. Sendo forçado a adivinhar, eu diria que a DLL é um filtro DirectX de 32 bits. Nesse caso, este deve ser o curso de ação adequado:
cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax
Isso deve ser executado em um prompt de comando elevado para que o UAC não possa interromper o acesso ao registro necessário. Faça mais perguntas sobre isso em superuser.com
Acabei de testar este método extremamente simples e ele funciona perfeitamente - mas eu uso a conta de Administrador embutida, então não tenho que pular para privilégios elevados.
O arquivo em lote a seguir dispensa o usuário da necessidade de mover arquivos para dentro / fora das pastas do sistema. Também deixa que o Windows aplique a versão adequada do Regsvr32.
INSTRUÇÕES:
Na pasta que contém o arquivo de biblioteca ( -.dllou -.ax) que deseja registrar, abra um novo arquivo de texto e cole em UMA das rotinas abaixo:
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS
copy %1 C:\Windows\System32
regsvr32 "%nx1"
echo END BATCH FILE
pause
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS
copy %1 C:\Windows\SysWOW64
regsvr32 "%nx1"
echo END BATCH FILE
pause
Salve seu novo arquivo de texto como um arquivo batch ( -.bat); em seguida, basta arrastar e soltar seu arquivo -.dllou -.axna parte superior do arquivo em lote.
Se o UAC não oferecer a oportunidade de executar o arquivo em lote como administrador, pode ser necessário elevar manualmente os privilégios (as instruções são para o Windows 7):
Clique com o botão direito no arquivo de lote;
Selecione Create shortcut;
Clique com o botão direito no atalho;
Selecione Properties;
Clique na Compatibilityguia;
Marque a caixa rotulada Run this program as administrator;
Arraste e solte seu arquivo -.dllou -.axsobre o novo atalho em vez do arquivo em lote.
É isso aí . Eu escolhi COPYem vez de MOVEpara evitar o fracasso de qualquer tentativa de acompanhamento UAC relacionada (s). O registro bem-sucedido deve ser seguido pela exclusão do arquivo original da biblioteca ( -.dllou -.ax).
Não se preocupe com as cópias feitas na pasta do sistema ( C:\Windows\System32ou C:\Windows\SysWOW64) por passagens anteriores - elas serão sobrescritas toda vez que você executar o arquivo em lote.
A menos que você tenha executado o arquivo em lote errado , nesse caso você provavelmente desejará excluir a cópia feita para a pasta de sistema errada ( C:\Windows\System32ouC:\Windows\SysWOW64 ) antes de executar o arquivo em lote adequado, ... ou ...
Ajude o Windows a escolher o arquivo de biblioteca certo a ser registrado, qualificando totalmente sua localização de diretório.
Do arquivo em lote correto, copie o caminho da pasta do sistema
Se 64 bits: C:\Windows\System32
Se 32 bits: C:\Windows\SysWOW64
Cole-o na próxima linha para que preceda %nx1
Se 64 bits: regsvr32 "C:\Windows\System32\%nx1"
Se 32 bits: regsvr32 "C:\Windows\SysWOW64\%nx1"
Colar o caminho entre aspas
Insira a barra invertida para separar %nx1do caminho da pasta do sistema
ou ...
Execute este arquivo de lote shotgun, que irá (em ordem):
Execute a limpeza dos processos de registro abortados
Reverta qualquer processo de registro concluído por seu arquivo de biblioteca;
Exclua todas as cópias de seu arquivo de biblioteca que foram salvas em qualquer uma das pastas do sistema;
Faça uma pausa para permitir que você termine o arquivo em lote neste ponto (e execute outro, se desejar).
Tentativa de instalação de 64 bits em seu arquivo de biblioteca
Copie seu arquivo de biblioteca para C:\Windows\System32;
Registre seu arquivo de biblioteca como um processo de 64 bits;
Faça uma pausa para permitir que você encerre o arquivo em lote neste ponto.
Desfazer instalação de 64 bits
Reverta qualquer registro de seu arquivo de biblioteca como um processo de 64 bits;
Exclua seu arquivo de biblioteca de C:\Windows\System32;
Faça uma pausa para permitir que você termine o arquivo em lote neste ponto (e execute outro, se desejar).
Tentativa de instalação de 32 bits em seu arquivo de biblioteca
Copie seu arquivo de biblioteca para C:\Windows\SystemWOW64
Registre seu arquivo de biblioteca como um processo de 32 bits;
Faça uma pausa para permitir que você encerre o arquivo em lote neste ponto.
Excluir cópia original não registrada do arquivo de biblioteca
Run as administratorfica esmaecido quando criei um atalho para o arquivo bat. Estou logado como administrador. Além disso, é %nx1ou %n1?
Jon Grah
3
Há uma diferença no Windows 7. Fazer logon como administrador não concede os mesmos direitos de quando executar um programa como Administrador.
Vá para Iniciar - Todos os programas - Acessórios. Clique com o botão direito na janela Comando e selecione "Executar como administrador" Agora registre a dll normalmente via: regsrvr32 xxx.dll
Parte da confusão em relação ao regsvr32 é que em janelas de 64 bits o nome e o caminho não mudaram, mas agora ele registra DLLs de 64 bits. O regsvr32 de 32 bits existe em SysWOW64, um nome que parece representar aplicativos de 64 bits. No entanto, o WOW64 no nome se refere ao Windows no Windows 64 ou mais explicitamente ao Windows de 32 bits no Windows de 64 bits. Quando você pensa dessa forma, o nome faz sentido, embora seja confuso neste contexto.
Não consigo encontrar minha fonte original em um blog do MSDN, mas ela é referenciada neste artigo da Wikipedia http://en.wikipedia.org/wiki/WoW64
Aqui está como eu corrigi esse problema em uma máquina Win7 x64:
1 - mensagem de erro:
"CoCreateInstance () falhou por favor, verifique suas entradas de registro CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} e certifique-se de que você está conectado como um administrador"
2 - procedimento de correção:
Inicie / digite cmd / RightMouseClique em cmd.exe e escolha "Executar como Administrador"
digitado: regsvr32 / s C: \ Arquivos de programas \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Arquivos de programas \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
regsvr32
, uma DLL deve exportar as funçõesDllRegisterServer
eDllUnregisterServer
. Não há registro para a grande maioria das DLLs que você cria.Respostas:
Digite
regsvr32 name.dll
no Prompt de Comando (executado em modo elevado!) E pressione “Enter”. Observe quename.dll
deve ser substituído pelo nome da DLL que você deseja registrar. Por exemplo, se você deseja registrar o iexplore.dll, digiteregsvr32 iexplore.dll
.fonte
regsvr32
caminho do arquivo .dll com nome de arquivo e extensão e pressione EnterBem, você não especifica se é uma dll de 32 ou 64 bits e não inclui a mensagem de erro, mas suponho que é o mesmo problema descrito neste artigo da KB: Mensagem de erro ao executar o Regsvr32.exe no Windows de 64 bits
Citação desse artigo:
Solução desse artigo:
fonte
Se a DLL for de 32 bits:
Copie a DLL para C: \ Windows \ SysWoW64 \
Em um prompt de comando elevado :
%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll
se a DLL for 64 bits:
Copie a DLL para C: \ Windows \ System32 \
Em um prompt de comando elevado :
%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll
Eu sei que parece o caminho errado, mas é assim que funciona. Vejo:
http://support.microsoft.com/kb/249873
Citação: "Nota Em uma versão de 64 bits de um sistema operacional Windows, existem duas versões do arquivo Regsv32.exe:
A versão de 64 bits é% systemroot% \ System32 \ regsvr32.exe.
A versão de 32 bits é% systemroot% \ SysWoW64 \ regsvr32.exe.
"
fonte
Em um sistema x64, system32 é para 64 bits e syswow64 é para 32 bits (não o contrário, conforme declarado em outra resposta). WOW (Windows no Windows) é o subsistema de 32 bits executado no subsistema de 64 bits).
É uma bagunça em termos de nomenclatura e serve apenas para confundir, mas é assim que as coisas são.
Novamente ...
syswow64 é de 32 bits, NÃO 64 bits.
system32 é de 64 bits, NÃO 32 bits.
Há um regsrv32 em cada um desses diretórios. Um é de 64 bits e o outro de 32 bits. É a mesma coisa com odbcad32 e et al. (Se você quiser ver drivers ODBC de 32 bits que não aparecerão com o odbcad32 padrão no system32, que é de 64 bits.)
fonte
regsvr32
cuidará dos detalhes, teoricamente detectará se você está registrando uma DLL de 32 ou 64 bits: stackoverflow.com/questions/18935163/…Abra o menu iniciar e digite cmd na caixa de pesquisa Segure Ctrl + Shift e pressione Enter
Isso executa o Prompt de Comando no modo Administrador.
Agora digite:
regsvr32 MyComobject.dll
fonte
Finalmente encontrei a solução, basta executar o CMD como administrador e escrever
então escreva isso
Espero que essa resposta te ajude
fonte
Se a DLL for de 32 bits:
se a DLL for de 64 bits:
fonte
Tudo aqui estava falhando no caminho errado. Então me lembrei de um truque dos velhos tempos do Win95. Abra a pasta do programa onde reside o .dll, abra C: / Windows / System32, role para baixo até regsvr32 e arraste e solte a dll da pasta do programa para rgsrver32. Boom, pronto.
fonte
Saber a mensagem de erro seria bastante valioso. Destina-se a fornecer informações, embora não faça sentido para você, faz para nós. Sendo forçado a adivinhar, eu diria que a DLL é um filtro DirectX de 32 bits. Nesse caso, este deve ser o curso de ação adequado:
Isso deve ser executado em um prompt de comando elevado para que o UAC não possa interromper o acesso ao registro necessário. Faça mais perguntas sobre isso em superuser.com
fonte
Acabei de testar este método extremamente simples e ele funciona perfeitamente - mas eu uso a conta de Administrador embutida, então não tenho que pular para privilégios elevados.
O arquivo em lote a seguir dispensa o usuário da necessidade de mover arquivos para dentro / fora das pastas do sistema. Também deixa que o Windows aplique a versão adequada do
Regsvr32
.INSTRUÇÕES:
Na pasta que contém o arquivo de biblioteca (
-.dll
ou-.ax
) que deseja registrar, abra um novo arquivo de texto e cole em UMA das rotinas abaixo:Salve seu novo arquivo de texto como um arquivo batch (
-.bat
); em seguida, basta arrastar e soltar seu arquivo-.dll
ou-.ax
na parte superior do arquivo em lote.Se o UAC não oferecer a oportunidade de executar o arquivo em lote como administrador, pode ser necessário elevar manualmente os privilégios (as instruções são para o Windows 7):
Create shortcut
;Properties
;Compatibility
guia;Run this program as administrator
;-.dll
ou-.ax
sobre o novo atalho em vez do arquivo em lote.É isso aí . Eu escolhi
COPY
em vez deMOVE
para evitar o fracasso de qualquer tentativa de acompanhamento UAC relacionada (s). O registro bem-sucedido deve ser seguido pela exclusão do arquivo original da biblioteca (-.dll
ou-.ax
).Não se preocupe com as cópias feitas na pasta do sistema (
C:\Windows\System32
ouC:\Windows\SysWOW64
) por passagens anteriores - elas serão sobrescritas toda vez que você executar o arquivo em lote.A menos que você tenha executado o arquivo em lote errado , nesse caso você provavelmente desejará excluir a cópia feita para a pasta de sistema errada (
C:\Windows\System32
ouC:\Windows\SysWOW64
) antes de executar o arquivo em lote adequado, ... ou ...Ajude o Windows a escolher o arquivo de biblioteca certo a ser registrado, qualificando totalmente sua localização de diretório.
C:\Windows\System32
C:\Windows\SysWOW64
%nx1
regsvr32 "C:\Windows\System32\%nx1"
regsvr32 "C:\Windows\SysWOW64\%nx1"
%nx1
do caminho da pasta do sistemaExecute este arquivo de lote shotgun, que irá (em ordem):
C:\Windows\System32
;C:\Windows\System32
;C:\Windows\SystemWOW64
fonte
Run as administrator
fica esmaecido quando criei um atalho para o arquivo bat. Estou logado como administrador. Além disso, é%nx1
ou%n1
?Há uma diferença no Windows 7. Fazer logon como administrador não concede os mesmos direitos de quando executar um programa como Administrador.
Vá para Iniciar - Todos os programas - Acessórios. Clique com o botão direito na janela Comando e selecione "Executar como administrador" Agora registre a dll normalmente via: regsrvr32 xxx.dll
fonte
E ao fazer isso, se você obtiver o código de erro 0x80040201, tente a solução em DllRegisterServer falhou com o código de erro 0x80040201 , mas certifique-se de abrir o prompt de comando como Executar como Administrador .
fonte
Você precisa executar o
cmd.exe
emc:\windows\system32\ by administrator
Comandos: Para cancelar o registro de arquivos * .dll
regsvr32.exe /u C:\folder\folder\name.dll
Para arquivos de registro * .dll
fonte
Parte da confusão em relação ao regsvr32 é que em janelas de 64 bits o nome e o caminho não mudaram, mas agora ele registra DLLs de 64 bits. O regsvr32 de 32 bits existe em SysWOW64, um nome que parece representar aplicativos de 64 bits. No entanto, o WOW64 no nome se refere ao Windows no Windows 64 ou mais explicitamente ao Windows de 32 bits no Windows de 64 bits. Quando você pensa dessa forma, o nome faz sentido, embora seja confuso neste contexto.
Não consigo encontrar minha fonte original em um blog do MSDN, mas ela é referenciada neste artigo da Wikipedia http://en.wikipedia.org/wiki/WoW64
fonte
Aqui está como eu corrigi esse problema em uma máquina Win7 x64:
1 - mensagem de erro:
"CoCreateInstance () falhou por favor, verifique suas entradas de registro CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} e certifique-se de que você está conectado como um administrador"
2 - procedimento de correção:
Espero que isto ajude !
fonte