31

Compilo mi código fuente de C++ con Visual Studio 11 Developer Preview. I static link a la biblioteca de tiempo de ejecución.¿Qué tienen de especial los ejecutables compilados con Visual Studio 11, que hace que los ejecutables no se puedan ejecutar en Windows XP?

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".

According to Microsoft Visual Studio 11 no es compatible con Windows XP.

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

+0

¿Qué tipo de proyecto que utiliza en VS2011 para su aplicación? – deepmax

+0

Uso un Proyecto Win32 y creo una Aplicación Win32. –

+1

Es una aplicación de 32 bits.El resultado de dumpbin es: volcado de archivo [Ruta] Tipo de archivo: imagen ejecutable Resumen 3000 .data 3000 .rdata 2000 .reloc 1000 .rsrc 6000 .text –

Respuesta

20

Parecen dejar de ser compatibles con sistemas anteriores en cada versión nueva de VS (NT4,2000, XP) Incluso si no utiliza el CRT en absoluto, aún fuerzan la versión del subsistema de PE a números altos. Puede solucionarlo por changing the numbers back 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 utilizar múltiples focalización y compiladores de más edad ...

+4

Le muestro las funciones que faltan (tanto para CRT como para MFC) y cómo evitar el hecho de que estas funciones faltan en XP en esta publicación de blog: http://tedwvc.wordpress.com/2012/03/11/how-to-get-visual-c-2012-vc -11-beta-static-linked-crt-and-mfc-applications-to-run-on-windows-xp/ –

8

Visual Studio 2012 será capaz de dirigirse a Windows XP más tarde en 2012:

Targeting Windows XP with C++ in 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 (¡uf!)

1

Las bibliotecas de ejecución incluidos con VS 2010 y superior hacen cumplir su ejecutable para importar dos nuevas funciones de kernel32.dll que faltan en Windows XP: EncodePointer y DecodePointer. Esos son necesarios para otro idiota intento 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.

+0

Esta es una razón. Pero no es el único. –

4

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

Vea más aquí: Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries.

Con v90 conjunto de herramientas de su binario será capaz de funcionar incluso en los 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

Cuestiones relacionadas