31 votes

Quelle est la particularité des fichiers exécutables compilés avec Visual Studio 11 qui les empêche de les exécuter sur Windows XP?

Je compile mon code source C++ avec Visual Studio 11 Developer Preview. Je lier statiquement à la bibliothèque d'exécution.

L'exécutable ne peut pas être exécuté sur Windows XP. Quand j'ai essayer de l'exécuter sur Windows XP j'ai le message d'erreur "[Chemin de l'Exécutable] n'est pas une Application Win32 valide.".

Selon Microsoft Visual Studio 11 ne prend pas en charge Windows XP.

Comment cela fonctionne que l'exécutable ne peut pas être exécuté sur Windows XP? Est-il quelque chose de spécial dans l'exécutable?

21voto

Anders Points 34448

Ils semblent baisse de soutien pour les systèmes plus anciens dans chaque nouvelle version de VS (NT4,2000,XP), Même si vous n'utilisez pas le CRT à tous, ils ont encore la force de la PE version sous-système à un grand nombre. Vous pouvez contourner ce problème en modifiant le nombre de retour à 5.0 dans un post étape de génération. Juste à l'évolution de ces chiffres devraient permettre à l'exe pour démarrer sur XP, à moins que le nouveau CRT est à l'aide de WinAPI fonctions qui n'existent pas sur XP.

L'autre alternative si vous souhaitez continuer à utiliser VS11 est d'utiliser le multi-ciblage et plus compilateurs...

8voto

RichieHindle Points 98544

Visual Studio 2012 sera en mesure de cibler Windows XP plus tard, en 2012:

Le ciblage de Windows XP avec C++ dans Visual Studio 2012

"Plus tard cet automne, Microsoft fournira une mise à jour de Visual Studio 2012 qui permettra à des applications C++ cible Windows XP. Cette mise à jour va apporter les modifications nécessaires à la Visual C++ 2012 de compilation, d'exécution et de bibliothèques pour permettre aux développeurs de créer des Dll et les applications qui s'exécutent sur Windows XP et les versions supérieures, ainsi que Windows Server 2003 et supérieur."

Edit: Ce qui est arrivé (ouf!)

4voto

Roman R. Points 34579

La solution de contournement est d'utiliser un autre Platform Toolset, ce qui permettra de relier les différentes version de la CRT et produire des binaires compatible avec les anciens systèmes d'exploitation.

Voir plus ici: Cible de Windows XP dans Visual Studio 11 Beta à l'aide de Visual Studio 2010 compilateur et les bibliothèques.

Avec v90 ensemble d'outils de votre binaire sera en mesure de fonctionner même dans les systèmes plus anciens, tels que Windows 2000.

1voto

valdo Points 7322

Les bibliothèques d'exécution fournies avec VS 2010 et versions ultérieures imposent à votre exécutable d'importer deux nouvelles fonctions de kernel32.dll manquantes sous Windows XP: EncodePointer et DecodePointer . Celles-ci sont nécessaires pour une nouvelle tentative naïve et idiote d'améliorer la "sécurité" du logiciel.

Dans VS 2010, il est possible d'utiliser les bibliothèques d'exécution de Visual Studio 2008, ce qui résout ce problème. Je ne sais pas s'il existe une telle option dans les versions ultérieures de VS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X