La aplicación no se pudo iniciar correctamente (0xc000007b)


Tengo una aplicación cliente/servidor que he estado desarrollando en un solo PC. Ahora necesita dos puertos serie, así que tomé prestada una PC de un amigo.

Cuando compilo mi aplicación e intento ejecutarla o depurarla (ya sea en el IDE de Delphi o desde el administrador de archivos de Windows), se produce un error "La aplicación no se pudo iniciar correctamente (0xc000007b)".

Googlear no trae mucho, pero parece indicar que esto no es nada específico de Delphi y sucede con otras aplicaciones. Parece ser causado por llamar en una DLL de 32 bits desde una aplicación de 64 bits o viceversa.

  • ambos pcs son Windows 7, 64 bit
  • ambos tienen Delphi Xe2 starter edition que solo puede manejar 32 bits
  • La aplicación funciona bien en mi PC, pero no en la de mi amigo
  • Otras aplicaciones de Delphi funcionan bien en ambos PC

¿Alguien puede darme una pista de cómo rastrear esto?

Author: Mawg, 2012-05-08

16 answers

Para empezar, sugeriría probar si hay un problema entre su aplicación y sus dependencias usando dependency walker

 120
Author: mox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-08 05:38:54

No se pudo resolver una dependencia de tiempo de carga. La forma más fácil de depurar esto es usar Dependency Walker. Utilice la opción Perfil para obtener la salida de diagnóstico del proceso de carga. Esto identificará el punto de falla y lo guiará a una solución.

La causa más común de este error es intentar cargar una DLL de 64 bits en un proceso de 32 bits, o viceversa.

 50
Author: David Heffernan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-08 08:06:29

Es una dll que falta. Posiblemente, su dll que funciona con puertos com tiene una dependencia dll sin resolver. Puede usar dependency walker y windows debugger. Compruebe toda la biblioteca mfc, por ejemplo. Además, puede utilizar nrCommlib-es grandes componentes para trabajar con puertos com.

 12
Author: Alex.kononov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-08 11:58:14

Probé todas las cosas especificadas aquí y encontré otra respuesta. Tuve que compilar mi aplicación con DLL de 32 bits. Había construido las bibliotecas tanto en 32 bits como en 64 bits, pero tenía mi PATH establecido en bibliotecas de 64 bits. Después de recompilar mi aplicación (con una serie de cambios en mi código también) obtuve este temido error y luché durante dos días. Finalmente, después de probar varias otras cosas, cambié mi PATH para tener las DLL de 32 bits antes que las DLL de 64 bits (tienen los mismos nombres). Y funcionó. Solo lo estoy agregando aquí para completar.

 11
Author: unxnut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-29 17:23:48

Se ha mencionado en respuestas anteriores que usar dependency walker es el camino a seguir, en mi caso (mi aplicación sigue fallando con el código de error), dependency walker mostró algunas dll que NO son relevantes!

Finalmente descubrí que puedo ejecutar la creación de perfiles yendo al menú "perfil" y se ejecutará la aplicación y se detendrá en el dll exacto que es la causa del problema! Descubrí que un dll de 32 bits fue elegido debido a la ruta y lo arreglé.

introduzca la descripción de la imagen aquí

 6
Author: pktCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-25 20:10:59

Recientemente tuve un problema en el que estaba desarrollando una aplicación (que usaba un puerto serie) y funcionaba en todas las máquinas en las que la probé, pero algunas personas estaban recibiendo este error.

Resulta que todas las máquinas en las que ocurrió el error estaban ejecutando Win7 x64 y NUNCA se habían actualizado.

Ejecutar una actualización de Windows arregló todas las máquinas en mi caso particular.

 5
Author: mitchfish36,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-05 21:26:35

En realidad este error indica un formato de imagen no válido. Sin embargo, ¿por qué sucede esto y qué significa generalmente el código de error? En realidad, esto podría aparecer cuando está tratando de ejecutar un programa que está hecho para o destinado a trabajar con un sistema operativo Windows de 64 bits, pero su computadora se está ejecutando en el sistema operativo de 32 bits.

Posibles razones:

  • Microsoft Visual C++
  • Necesita reiniciar
  • DirectX
  • . NET Framework
  • Necesidad de Reinstalar
  • Necesita ejecutar la aplicación como administrador

Fuente: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/

 3
Author: Solve101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-01 15:33:39

Experimenté el mismo problema al desarrollar una aplicación cliente-servidor usando Microsoft Visual Studio 2012.

Si usó Visual Studio para desarrollar la aplicación, debe asegurarse de que el nuevo (es decir, el equipo en el que no se desarrolló el software) tenga el paquete Redistribuible de Microsoft Visual C++ apropiado. Por apropiado, necesita el año correcto y la versión de bits (es decir, x86 para 32 bits y x64 para 64 bits) del Paquete Redistribuible de Visual C++.

El Visual C++ Los paquetes redistribuibles instalan componentes en tiempo de ejecución necesarios para ejecutar aplicaciones C++ creadas con Visual Studio.

Aquí hay un enlace al Redistribuible de Visual C++ para Visual Studio 2015 .

Puede comprobar qué versiones están instaladas yendo a Panel de control -> Programas -> Programas y Características.

Así es como obtuve este error y lo arreglé:

1) Desarrollé una aplicación de 32 bits usando Visual Studio 2012 en mi computadora. Vamos a llamar a mi computer ComputerA.

2) He instalado el .exe y los archivos relacionados en un equipo diferente que llamaremos ComputerB.

3) En ComputerB, corrí el .exe y recibió el mensaje de error.

4) En ComputerB, miré los Programas y Características y no vi Visual C++ 2012 Redistributable (x64).

5) En ComputerB, busqué en Google Visual C++ 2012 Redistributable y seleccioné e instalé la versión x64.

6) En ComputerB, corrí el .exe en ComputerB y no lo hizo recibe el mensaje de error.

 3
Author: user3731622,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-12 23:15:23

Este puede ser un caso en el que la depuración del depurador podría ser útil. Esencialmente si sigue las instrucciones aquí puede ejecutar dos ide y uno depurará en el otro. Si usted un su aplicación en uno, a veces puede detectar errores que de otra manera se pierda. Vale la pena intentarlo.

 2
Author: Toby Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-08 07:30:12

He visto el error al intentar ejecutar VC++ debug ejecutable en una máquina que no tenía Visual C++ instalado. La construcción de una versión de lanzamiento y el uso de que lo arregló.

 2
Author: Bill Greer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-16 21:12:26

En mi caso, el error ocurrió cuando cambié el nombre de una DLL después de compilarla (usando Visual Studio 2015), de modo que se ajuste al nombre esperado por un ejecutable, que dependía de la DLL. Después del cambio de nombre, la lista de símbolos exportados mostrada por Dependency Walker estaba vacía, y se mostraba el mensaje de error "La aplicación no se pudo iniciar correctamente".

Así que podría arreglarse cambiando el nombre del archivo de salida en las opciones del enlazador de Visual Studio.

 2
Author: nucleon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 12:27:08

Acabo de resolver este problema para mi proyecto personal (gracias a Dries por eso). Para mí fue porque el camino del proyecto era demasiado largo. Después de guardar el .sln a un camino más corto (C:/MyProjects) y compilando desde allí se ejecutó sin el error.

 1
Author: user1539405,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-31 13:50:18

También descargue y descomprima "Dependencias" en la misma carpeta donde puso el wget.exe de

Http://gnuwin32.sourceforge.net/packages/wget.htm

Entonces tendrás algo de lib*.archivos dll, así como wget.exe en la misma carpeta y debería funcionar bien.

(también he contestado aquí https://superuser.com/a/873531/146668 que encontré.)

 1
Author: Andreas Reiff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 10:18:14

Acabo de encontrarme con este problema. Busqué "C++ " en mi" Aplicaciones y características " en el panel de control de Windows 10 y noté que algún tipo de actualización se había ejecutado unos días antes e instalado VC++ Redistributable 2012-2017. La aplicación que se estaba ejecutando en el mensaje de error solo requiere VC++ 2010. Desinstalé todos ellos y luego reinstalé solo 2010 x86/x64, y el error desapareció y la aplicación funcionó como se esperaba.

 1
Author: Chris Putnam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-07 11:57:18

Eso puede suceder si por alguna razón se carga un recurso x86 desde una máquina x64. Para evitar esto explícitamente, agregue esta directiva preprocesador a stdafx.h (por supuesto, en mi ejemplo el recurso problemático es Windows Common Controls DLL.

#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif
 1
Author: Michael Haephrati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-27 18:37:56

Usted puede tener esto si usted está tratando de manifestar su aplicación que tiene una dependencia de la Microsoft.Windows.Common-Controls asamblea. Haga esto cuando quiera cargar la versión 6 de la biblioteca de controles comunes, de modo que los estilos visuales se apliquen a los controles comunes.

Probablemente siguió la documentación original de Microsoft desde los días de Windows XP y agregó lo siguiente al manifiesto de su aplicación:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

Windows XP ya no es el sistema operativo, y ya no eres una aplicación de 32 bits. En los 17 años intermedios Microsoft actualizó su documentación ; ahora es el momento de actualizar su manifiesto:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

Raymond Chen tiene una hermosa historia de los Controles Comunes:

 1
Author: Ian Boyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 21:03:52