x64 visual studio programa otra microsoft ejecutar consola compilar como abrir c++ visual-studio windows-xp compatibility visual-studio-2012

c++ - programa - ¿Qué tiene de especial los ejecutables compilados con Visual Studio 11, que hace que los ejecutables no se puedan ejecutar en Windows XP?



microsoft visual c++ 2013 redistributable(x86) (4)

Recopilo mi código fuente de C ++ con Visual Studio 11 Developer Preview. I static link a la biblioteca de tiempo de ejecución.

El ejecutable resultante no se puede ejecutar en Windows XP. Cuando intento ejecutarlo en Windows XP aparece el mensaje de error "[Ruta de acceso ejecutable] no es una aplicación Win32 válida".

De acuerdo con Microsoft Visual Studio 11 no será compatible con Windows XP.

¿Cómo funciona que el ejecutable resultante no se puede ejecutar en Windows XP? ¿Hay algo especial dentro del ejecutable?


Las bibliotecas de tiempo de ejecución incluidas con VS 2010 y superior imponen su ejecutable para importar dos funciones nuevas de kernel32.dll que faltan en Windows XP: EncodePointer y DecodePointer . Esos son necesarios para otro intento idiota e ingenuo de mejorar la "seguridad" del software.

En VS 2010 hay una opción para usar las bibliotecas de tiempo de ejecución de Visual Studio 2008, que resuelve este problema. No sé si existe tal opción en versiones posteriores de VS.


Parecen dejar de admitir sistemas más antiguos en cada nueva versión de VS (NT4,2000, XP ). Incluso si no se usa el CRT, aún obligan a la versión del subsistema de PE a tener números altos. Puede solucionarlo cambiando los números de nuevo a 5.0 en un paso posterior a la compilación. El solo hecho de cambiar esos números debería permitirle al ejecutable comenzar con XP a menos que el nuevo CRT esté usando funciones de WinAPI que no existen en XP.

La otra alternativa si quiere seguir usando VS11 es usar compiladores múltiples y de objetivos múltiples ...


Visual Studio 2012 podrá apuntar a Windows XP más adelante en 2012:

Orientación de Windows XP con C ++ en Visual Studio 2012

"A finales de otoño, Microsoft proporcionará una actualización de Visual Studio 2012 que permitirá a las aplicaciones C ++ apuntar a Windows XP. Esta actualización realizará las modificaciones necesarias en el compilador de Visual C ++ 2012, el tiempo de ejecución y las bibliotecas para permitir a los desarrolladores crear aplicaciones y DLL que se ejecuta en Windows XP y versiones superiores, así como en Windows Server 2003 y versiones posteriores ".

Editar : Esto ha sucedido ahora (¡uf!)


La solución consiste en utilizar un conjunto de Platform Toolset diferente, que enlazará una versión diferente de CRT y producirá binarios compatibles con sistemas operativos anteriores.

Vea más aquí: apunte a Windows XP en Visual Studio 11 Beta usando el compilador y las bibliotecas de Visual Studio 2010 .

Con el v90 herramientas v90 su binario podrá ejecutarse incluso en sistemas más antiguos, como Windows 2000.

http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png