2010-12-28 60 views
21

Estoy intentando registrar un archivo DLL COM en Windows Server 2008 R2. Estos son los pasos que di:Registrar el archivo DLL en Windows Server 2008 R2

  1. Run cmd como administrador
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

Cuando ejecuto ese comando consigo este error:

The module temp12.dll failed to load. Make sure the binary is stored at the specified path or debut it to check for problems with the binary or dependent .DLL files. The specified module could not be found.

yo era capaz de registrar el el mismo archivo DLL en Windows   2000.

También probé

c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll" 

Y me dio este mensaje:

the module c:\tempdl\temp12.dll was loaded but the call to DllRegisterServer failed with error code 0x80040154 . For more information about this problem, search online using the error code as the search term

+0

Si quisiera poner todo lo relacionado de algún lugar en un Dropbox estaría feliz para investigar esto para que la DLL . – Kev

+0

@kev gracias por la oferta Kev. Pero lo tengo arreglado. –

Respuesta

26

Ese es el error que se obtiene cuando la DLL necesita que otro servidor COM se registre primero o tiene una dependencia en otra DLL que no está disponible. La herramienta Regsvr32.exe hace muy poco, llama a LoadLibrary() para cargar la DLL que se pasa en el argumento de la línea de comando. Luego GetProcAddress() para encontrar el punto de entrada DllRegisterServer() en la DLL. Y lo llama para dejarlo en el servidor COM para registrarse.

Lo que que hace el código es bastante indescifrable. Sin embargo, el diagnóstico que obtuvo es muy evidente por el código de error, por alguna razón, este servidor COM necesita otro para registrarse primero. El mensaje de error es malo, no le dice qué otro servidor necesita. Un triste efecto secundario de la forma en que funciona el manejo de errores COM.

Para resolver este problema, utilice la herramienta ProcMon de SysInternals. Le muestra qué claves de registro Regsvr32.exe (en realidad: el servidor COM) se está abriendo para encontrar el servidor. Busque los accesos a la clave CLSID. Eso te da una pista de lo que {guid} está buscando. Eso todavía no te dice la DLL del servidor, debes comparar el rastreo con uno que obtienes de una máquina que funciona. La clave InprocServer32 tiene la ruta DLL.

+0

Soy un usuario normal que intenta depurar un programa que sus autores no me responden. He descargado Process Monitor, pero no sé cómo seguir tu último párrafo. ¿Puede explicarme cómo resolver este problema de una manera simple? – Ooker

4

puede que tenga que registrar este DLL utilizando la versión de 32 bits de regsvr32.exe:

c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll

+1

Lo intenté también y aparece este error: "se cargó el módulo c: \ tempdl \ temp12.dll pero la llamada a DllRegisterServer falló con el código de error 0x80040154. Para obtener más información acerca de este problema, busque en línea usando el código de error como el término de búsqueda " –

+0

¿Está haciendo esto desde un símbolo del sistema con permisos elevados? – vcsjones

+0

Sí, tengo el script siguiente en un archivo bat y lo ejecuto como administrador. script como el desde cmd comienza en c: \ windows \ system32 cd .. cd syswow64 regsvr32 "c: \ tempdl \ temp12.dll" –

0

Usted puede necesita instalar ATL si sus objetos COM usan ATL, como se describe en este artículo de KB:

http://support.microsoft.com/kb/201191

Es probable que estas bibliotecas tengan que ser suministradas por los desarrolladores para garantizar la versión correcta.

+0

Tengo atl.dll en C: \ Windows \ SysWOW64 \ y C: \ Windows \ System32, ¿todavía tengo que hacer lo que dicen en ese artículo? –

+0

Los dlls que estoy tratando de registrar en 2008 se construyeron en 2000 y ni siquiera sé si tenemos el código fuente. –

3

Error 0x80040154 es COM REGDB_E_CLASSNOTREG, que significa "Clase no registrada". Básicamente, una clase COM no está declarada en el registro de instalación.

Si obtiene este error al intentar registrar una DLL, es posible que el código de registro para esta DLL intente crear una instancia de otro servidor COM (DLL o EXE) que falta o no está registrado en esta instalación .

Si no tiene acceso a la fuente original de DLL, sugeriría utilizar la herramienta Process Monitor de SysInternal para rastrear las búsquedas de registro COM (solía haber una herramienta RegMon más simple, pero puede que ya no funcione).

Debe poner un filtro en el proceso de trabajo (aquí: Regsvr32.exe) para capturar solo lo que sea interesante. Luego debe buscar las consultas en HKEY_CLASSES_ROOT \ [a progid, una cadena] que fallan (con el error NAME_NOT_FOUND por ejemplo) o las consultas en HKEY_CLASSES_ROOT \ CLSID \ [a guid] que fallan.

PD: Desafortunadamente, puede haber muchas cosas que parecen fallar en un sistema Windows que funciona perfectamente, por lo que tendrá que estudiar todos los errores con cuidado. Buena suerte :-)

0

Esto es lo que tiene que ocurrir.

Tienes que copiar el archivo DLL que desea registrar a: c: \ windows \ SysWOW64 \

Luego, en el cuadro de diálogo Ejecutar, escriba esto en: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

y obtendrá la mensaje:

DllRegisterServer in c:\windows\system32\YourDLL.dll succeeded.

+0

Esto funcionó para nosotros: teníamos el dll en la carpeta incorrecta, cuando lo pusimos en SysWOW64, no registró ningún problema. ¡Gracias! – Vidar

+1

Podría funcionar para usted, pero no debería copiar sus propias DLL en las carpetas del sistema. – njplumridge

1

he encontrado problema similar al registrar mi activeX (OCX) en el servidor windows 2008 R2.To resolver esto he utilizado http://www.chestysoft.com/dllregsvr/default.asp tool.There algún problema con mi dependencia OCX s o Estoy recibiendo "No se pudo cargar el módulo temp12.dll. Asegúrese de que el binario esté almacenado en la ruta especificada o déjelo en primer lugar para verificar si hay problemas con los archivos .DLL binarios o dependientes. No se pudo encontrar el módulo especificado. "Mensaje de error Cuando intente registrar su OCX con esta herramienta, se le preguntará si el ocx está teniendo dependencia o si recibirá un mensaje de éxito. Obtuve el mensaje para mfc70.dll y msvcr70.dll dependency.so pego estos dll en la carpeta system32 de C: \ windows y listo. Después de eso, registro mi ocx con éxito. Usé la versión de 32 bits de la herramienta chestysoft (dllregsvr.exe) en la máquina de Windows Server 2008 R2 64bit.

0

necesita la ruta completa al regsvr32% windir manera $ \ system32 \ regsvr32 < * .dll>

Cuestiones relacionadas