¿Cómo registro un archivo DLL en Windows 7 de 64 bits?

101

He intentado utilizar el siguiente código:

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

Pero esto no me está funcionando. ¿Cómo puedo registrar un archivo DLL en Windows 7 con un procesador de 64 bits?

Rajkumar Reddy
fuente
Dado que esta pregunta está etiquetada como "vb.net", me pregunto por qué está intentando registrar una DLL que creó en VB.NET. Para ser utilizado con regsvr32, una DLL debe exportar las funciones DllRegisterServery DllUnregisterServer. No hay ningún registro de la gran mayoría de las DLL que crea.
Cody Gray
12
¿Qué quieres decir con no funciona o no es útil? ¿Recibes un mensaje de error? ¿Qué dice?
Cody Gray

Respuestas:

68

Escribe regsvr32 name.dllen el símbolo del sistema (¡ejecutado en modo elevado!) Y presiona "Enter". Tenga en cuenta que name.dlldebe reemplazarse con el nombre de la DLL que desea registrar. Por ejemplo, si desea registrar iexplore.dll, escriba regsvr32 iexplore.dll.

Harold Sota
fuente
5
regsvr32 ruta del archivo .dll con nombre de archivo y extensión y presione enter
RK Sharma
202

Bueno, no especifica si es un dll de 32 o 64 bits y no incluye el mensaje de error, pero supongo que es el mismo problema que se describe en este artículo de KB: Mensaje de error cuando ejecuta Regsvr32.exe en Windows de 64 bits

Cita de ese artículo:

Este comportamiento se produce porque el archivo Regsvr32.exe de la carpeta System32 es una versión de 64 bits. Cuando ejecuta Regsvr32 para registrar una DLL, está utilizando la versión de 64 bits de forma predeterminada.

Solución de ese artículo:

Para resolver este problema, ejecute Regsvr32.exe desde la carpeta% SystemRoot% \ Syswow64. Por ejemplo, escriba los siguientes comandos para registrar la DLL: cd \windows\syswow64 regsvr32 c:\filename.dll

Hans Olsson
fuente
13
¿Por qué esta no es la respuesta seleccionada?
Mike Devenney
5
Esta realmente debería ser la respuesta correcta. Puedo entender que en su publicación original la sintaxis era incorrecta, pero Rajkumar comentó que estaba recibiendo un mensaje de error incluso cuando usaba la sintaxis correcta. Esto lleva dos pasos a la respuesta correcta para alguien que busca en lugar de uno. Primero a la respuesta seleccionada como correcta, luego siguiendo la cadena de comentarios, terminando en esta publicación.
Rob
102

Si la DLL es de 32 bits:

Copie la DLL en C: \ Windows \ SysWoW64 \
En un símbolo del sistema elevado :%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll

si la DLL es de 64 bits:

Copie la DLL en C: \ Windows \ System32 \
En un símbolo del sistema elevado :%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll

Sé que parece al revés, pero así es como funciona. Ver:

http://support.microsoft.com/kb/249873
Cita: "Nota En una versión de 64 bits de un sistema operativo Windows, hay dos versiones del archivo Regsv32.exe:
La versión de 64 bits es% systemroot% \ System32 \ regsvr32.exe.
La versión de 32 bits es% systemroot% \ SysWoW64 \ regsvr32.exe
" .

Liam
fuente
26
+1 para "Sé que parece al revés, pero así es como funciona" con enlace a support.microsoft.com ... sin el enlace es difícil de creer.
Trevor Boyd Smith
6
"En cmd elevado" es muy importante !!
shindigo
4
No creo que tengamos que copiarlo en la carpeta system32 o syswow64. Simplemente registre el archivo donde sea que esté.
Nikos
30

En un sistema x64, system32 es de 64 bits y syswow64 es de 32 bits (no al revés como se indica en otra respuesta). WOW (Windows en Windows) es el subsistema de 32 bits que se ejecuta en el subsistema de 64 bits).

Es un desastre en términos de nombres y solo sirve para confundir, pero así es.

De nuevo ...

syswow64 es de 32 bits, NO de 64 bits.

system32 es de 64 bits, NO de 32 bits.

Hay un regsrv32 en cada uno de estos directorios. Uno es de 64 bits y el otro es de 32 bits. Lo mismo ocurre con odbcad32 y et al. (Si desea ver controladores ODBC de 32 bits que no se mostrarán con el odbcad32 predeterminado en system32, que es de 64 bits).

phill
fuente
1
¿Por qué eso importa? regsvr32se encargará de los detalles, teóricamente detectará si está registrando una DLL de 32 o 64 bits: stackoverflow.com/questions/18935163/…
Sk8erPeter
8

Abra el menú de inicio y escriba cmd en el cuadro de búsqueda Mantenga presionado Ctrl + Shift y presione Entrar

Esto ejecuta el símbolo del sistema en modo Administrador.

Ahora escriba: regsvr32 MyComobject.dll

Sushant Rath
fuente
6

Finalmente encontré la solución, simplemente ejecute CMD como administrador y luego escriba

cd \windows\syswow64

entonces escribe esto

regsvr32 c:\filename.dll

Espero que la respuesta te ayude

Hayder Chebaane
fuente
Si ya ha copiado el nombre de archivo.dll a la carpeta syswow64 y cambia el directorio de trabajo a syswow64 en el símbolo del sistema, entonces "c: \" en "regsvr32 c: \ nombre de archivo.dll" no es necesario. En resumen, "regsvr32 c: \ filename.dll" debería leer "regsvr32 filename.dll"
Josh McKearin
6

Si la DLL es de 32 bits:

  1. Copie la DLL en C: \ Windows \ SysWoW64 \
  2. En cmd elevado:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namedll.dll

si la DLL es de 64 bits:

  1. Copie la DLL en C: \ Windows \ System32 \
  2. En cmd elevado:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namedll.dll
Dragos
fuente
6

Todo aquí estaba fallando como camino equivocado. Entonces recordé un truco de los viejos tiempos de Win95. Abra la carpeta del programa donde reside el .dll, abra C: / Windows / System32, desplácese hacia abajo hasta regsvr32 y arrastre y suelte el dll de la carpeta del programa en rgsrver32. Boom, hecho.

ohm1
fuente
2
esto funciona, pero podría ser problemático si necesita ejecutarlo como administrador.
workabyte
3

Conocer el mensaje de error sería bastante valioso. Está destinado a proporcionar información, aunque para usted no tiene ningún sentido, lo tiene para nosotros. Si me veo obligado a adivinar, diría que la DLL es un filtro DirectX de 32 bits. En cuyo caso, este debería ser el curso de acción adecuado:

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

Esto debe ejecutarse en un símbolo del sistema elevado para que UAC no pueda detener el acceso al registro que se requiere. Haga más preguntas sobre esto en superuser.com

Hans Passant
fuente
3

Acabo de probar este método extremadamente simple y funciona perfectamente, pero uso la cuenta de administrador incorporada, por lo que no tengo que saltar por los obstáculos para obtener privilegios elevados.

El siguiente archivo por lotes libera al usuario de la necesidad de mover archivos dentro y fuera de las carpetas del sistema. También deja que Windows aplique la versión adecuada de Regsvr32.

INSTRUCCIONES:

  • En la carpeta que contiene la biblioteca ( -.dllo -.ax) archivo que desea registrar, abra un nuevo archivo de texto y péguelo en UNA de las siguientes rutinas:

    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
    
  • Guarde su nuevo archivo de texto como un archivo por lotes ( -.bat); luego, simplemente arrastre y suelte su archivo -.dllo -.axencima del archivo por lotes.

  • Si UAC no le da la oportunidad de ejecutar el archivo por lotes como administrador, es posible que deba elevar manualmente los privilegios (las instrucciones son para Windows 7):

    1. Haga clic derecho en el archivo por lotes;
    2. Seleccionar Create shortcut;
    3. Haga clic derecho en el acceso directo;
    4. Seleccionar Properties;
    5. Haga clic en la Compatibilitypestaña;
    6. Marque la casilla etiquetada Run this program as administrator;
    7. Arrastre y suelte su archivo -.dllo -.axsobre el nuevo acceso directo en lugar del archivo por lotes.

Eso es todo . Elegí en COPY lugar de MOVE evitar el fracaso de cualquier intento de seguimiento relacionado con UAC. El registro exitoso debe ir seguido de la eliminación del archivo ( -.dll o ) de la biblioteca original -.ax.

No se preocupe por las copias realizadas en la carpeta del sistema ( C:\Windows\System32 o C:\Windows\SysWOW64) por pasadas anteriores; se sobrescribirán cada vez que ejecute el archivo por lotes.

A menos que haya ejecutado el archivo por lotes incorrecto , en cuyo caso probablemente querrá eliminar la copia realizada en la carpeta del sistema incorrecta ( C:\Windows\System32 o C:\Windows\SysWOW64 ) antes de ejecutar el archivo por lotes adecuado, ... o ...

  • Ayude a Windows a elegir el archivo de biblioteca correcto para registrar calificando completamente su ubicación de directorio.

    1. Desde el archivo por lotes correcto, copie la ruta de la carpeta del sistema
      • Si es de 64 bits: C:\Windows\System32
      • Si es de 32 bits: C:\Windows\SysWOW64
    2. Péguelo en la siguiente línea para que preceda %nx1
      • Si es de 64 bits: regsvr32 "C:\Windows\System32\%nx1"
      • Si es de 32 bits: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • Pegar la ruta entre comillas
        • Insertar barra invertida para separar %nx1de la ruta de la carpeta del sistema
      • o ...

  • Ejecute este archivo por lotes de escopeta, que (en orden):

    1. Realizar limpieza de procesos de registro abortados
      • Invierta cualquier proceso de registro completado por su archivo de biblioteca;
      • Elimine todas las copias de su archivo de biblioteca que se hayan guardado en cualquiera de las carpetas del sistema;
      • Haga una pausa para que pueda terminar el archivo por lotes en este punto (y ejecute otro si lo desea).
    2. Intente la instalación de 64 bits en su archivo de biblioteca
      • Copie su archivo de biblioteca a C:\Windows\System32;
      • Registre su archivo de biblioteca como un proceso de 64 bits;
      • Haga una pausa para permitirle terminar el archivo por lotes en este punto.
    3. Deshacer la instalación de 64 bits
      • Invierta cualquier registro de su archivo de biblioteca como un proceso de 64 bits;
      • Elimine su archivo de biblioteca de C:\Windows\System32;
      • Haga una pausa para que pueda terminar el archivo por lotes en este punto (y ejecute otro si lo desea).
    4. Intente la instalación de 32 bits en su archivo de biblioteca
      • Copie su archivo de biblioteca a C:\Windows\SystemWOW64
      • Registre su archivo de biblioteca como un proceso de 32 bits;
      • Haga una pausa para permitirle terminar el archivo por lotes en este punto.
    5. Eliminar la copia original no registrada del archivo de la biblioteca
Usuario agradecido
fuente
Run as administratoraparece atenuado cuando creé un acceso directo para el archivo bat. Estoy registrado como administrador. Además, ¿es %nx1o %n1?
Jon Grah
3

Hay una diferencia en Windows 7. Iniciar sesión como Administrador no otorga los mismos derechos que cuando ejecuta un programa como Administrador.

Vaya a Inicio - Todos los programas - Accesorios. Haga clic derecho en la ventana de comandos y seleccione "Ejecutar como administrador". Ahora registre el dll normalmente a través de: regsrvr32 xxx.dll

Werner Spreeuwenberg
fuente
3

Usted necesidad de ejecutar el cmd.exeenc:\windows\system32\ by administrator

Comandos: para anular el registro de archivos * .dll

regsvr32.exe /u C:\folder\folder\name.dll

Para registrar archivos * .dll

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

Parte de la confusión con respecto a regsvr32 es que en las ventanas de 64 bits el nombre y la ruta no han cambiado, pero ahora registra archivos DLL de 64 bits. El regsvr32 de 32 bits existe en SysWOW64, un nombre que parece representar aplicaciones de 64 bits. Sin embargo, WOW64 en el nombre se refiere a Windows en Windows 64, o más explícitamente a Windows de 32 bits en Windows de 64 bits. Cuando lo piensas de esta manera, el nombre tiene sentido aunque es confuso en este contexto.

No puedo encontrar mi fuente original en un blog de MSDN, pero se hace referencia a ella en este artículo de Wikipedia http://en.wikipedia.org/wiki/WoW64

Adán
fuente
1

Así es como solucioné este problema en una máquina Win7 x64:

1 - mensaje de error:

"CoCreateInstance () falló. Por favor, compruebe las entradas de registro CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} y asegúrese de haber iniciado sesión como administrador"

2 - procedimiento de reparación:

  • Inicio / escriba cmd / RightMouse Haga clic en cmd.exe y elija "Ejecutar como administrador"
  • escribió: regsvr32 / s C: \ Archivos de programa \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Archivos de programa \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • reinicie Win 7 y vuelva a funcionar.

Espero que esto ayude !

ARTES LAOMUSICAS
fuente