tag para online mp3tag mp3meta windows winapi dll com regsvr32

windows - para - RegSvr32 la documentación de códigos de salida?



tag rename (3)

La respuesta de Ben es correcta, sin embargo, tenga en cuenta que el código de error 3 también se da como resultado si

  • el .DLL no se pudo encontrar
  • el .DLL estaba bloqueado por otro proceso y no se podía leer
  • el proceso no tenía los derechos suficientes para abrir el archivo. Por ejemplo, no ejecutar con derechos de administrador cuando sea necesario (con archivos específicos o archivos comunes en la unidad C)

> #define FAIL_LOAD 3 // LoadLibrary Failed

Se siente un poco vago, pero la LoadLibrary se refiere a las DLL referidas dentro de la DLL específica. Usando una aplicación como Depends , puede encontrar todas las referencias, incluidas las que faltan. Tenga en cuenta que una referencia faltante no siempre da como resultado un código de error 3 (en los casos en que el DLL realmente no lo usó)

RegSvr32.exe con RegSvr32.exe para registrar un servidor COM y obtuve los siguientes códigos de salida:

0 - cuando se registra correctamente DLL Com Server normal

3 - cuando intente registrar el DLL Com Server falso (archivo de texto simple renombrado a .DLL

4 - cuando intenta registrar DLL simple, no Com Server

Pregunta: ¿dónde puedo encontrar una descripción oficial (o no oficial pero buena) de todos los posibles códigos de salida y su significado?

Buscar en Internet no me dio resultado, en SO encontré este tema donde está escrito que los códigos de salida son los mismos con el código de error del sistema de Windows, pero no entendí por qué cuando trato de registrar un archivo incorrecto obtengo el código = 3 = ERROR_PATH_NOT_FOUND , y al registrar DLL no COM - 4 = ERROR_TOO_MANY_OPEN_FILES ? Para mí no suena lógicamente.


Los códigos de salida no están documentados. La documentación está aquí:

Sin embargo, el código fuente para una versión REGSVR32.EXE se incluye con Visual Studio 2008. Esto da su versión como 4.0.0, por lo que no es la misma que la enviada con Windows, que informa la versión 6.

Un vistazo rápido muestra estos:

#define FAIL_ARGS 1 // Invalid Argument #define FAIL_OLE 2 // OleInitialize Failed #define FAIL_LOAD 3 // LoadLibrary Failed #define FAIL_ENTRY 4 // GetProcAddress failed #define FAIL_REG 5 // DllRegisterServer or DllUnregisterServer failed.

Leer el código fuente sugiere que bajo ninguna circunstancia devuelve ningún otro código que los anteriores y cero para el éxito, lo que prueba que no es el mismo que el de Windows.

Sospecho que la diferencia en los códigos de retorno es que, si llega hasta GetProcAddress, devuelve el código de salida de la función que llama, en lugar de devolver siempre 5.

Idealmente, habrían utilizado GetLastError para obtener un código de salida más útil, pero sospecho que hay demasiadas herramientas (por ejemplo, programas de instalación de terceros) que ahora dependen de los códigos de salida 2-4, y es demasiado tarde para cambiarlo.


Visual Studio solía enviar una muestra de MFC que en realidad era la fuente de la utilidad RegSvr32 y recuerdo haberlo reparado para recopilar los códigos de salida:

FAIL_ARGS 1 FAIL_OLE 2 FAIL_LOAD 3 FAIL_ENTRY 4 // Not ERROR_TOO_MANY_OPEN_FILES but as expected "could not resolve // DLLRegisterServer" as your using an invalid DLL FAIL_REG 5

No puedo encontrar la muestra, pero si busco lo que extraje de Google, aparece esto: http://support.microsoft.com/kb/207132 que tiene códigos coincidentes, así que parece que el código de demostración de KB también se tomó de RegSvr . Es trivial descifrar las razones detrás de cada uno de los códigos de falla.