Como registro um arquivo DLL no Windows 7 de 64 bits?

101

Tentei usar o seguinte código:

cd c:\windows\system32
regsvr32.exe dllname.ax

Mas isso não está funcionando para mim. Como posso registrar um arquivo DLL no Windows 7 com um processador de 64 bits?

Rajkumar Reddy
fonte
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.

Harold Sota
fonte
5
regsvr32 caminho do arquivo .dll com nome de arquivo e extensão e pressione Enter
RK Sharma
202

Bem, 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:

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\syswow64 regsvr32 c:\filename.dll

Hans Olsson
fonte
13
Por que esta não é a resposta selecionada?
Mike Devenney de
5
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.
"

Liam
fonte
26
+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.)

phill
fonte
1
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.

Agora digite: regsvr32 MyComobject.dll

Sushant Rath
fonte
6

Finalmente encontrei a solução, basta executar o CMD como administrador e escrever

cd \windows\syswow64

então escreva isso

regsvr32 c:\filename.dll

Espero que essa resposta te ajude

Hayder Chebaane
fonte
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"
Josh McKearin
6

Se a DLL for de 32 bits:

  1. Copie a DLL para C: \ Windows \ SysWoW64 \
  2. Em cmd elevado:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namedll.dll

se a DLL for de 64 bits:

  1. Copie a DLL para C: \ Windows \ System32 \
  2. Em cmd elevado:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namedll.dll
Dragos
fonte
6

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.

ohm1
fonte
2
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

Hans Passant
fonte
3

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):

    1. Clique com o botão direito no arquivo de lote;
    2. Selecione Create shortcut;
    3. Clique com o botão direito no atalho;
    4. Selecione Properties;
    5. Clique na Compatibilityguia;
    6. Marque a caixa rotulada Run this program as administrator;
    7. Arraste e solte seu arquivo -.dllou -.axsobre o novo atalho em vez do arquivo em lote.

É isso aí . Eu escolhi COPY em vez de MOVE 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 ou 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\System32 ou C:\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.

    1. Do arquivo em lote correto, copie o caminho da pasta do sistema
      • Se 64 bits: C:\Windows\System32
      • Se 32 bits: C:\Windows\SysWOW64
    2. 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):

    1. 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).
    2. 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.
    3. 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).
    4. 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.
    5. Excluir cópia original não registrada do arquivo de biblioteca
Usuário Agradecido
fonte
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

Werner Spreeuwenberg
fonte
3

Você precisa executar o cmd.exeemc:\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

regsvr32.exe C:\folder\folder\name.dll
lails
fonte
2

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

Adão
fonte
1

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
  • reinicie o Win 7 e volte aos negócios!

Espero que isto ajude !

LAOMUSIC ARTS
fonte