Quelle est la particularité des exécutables compilés avec Visual Studio 11, qui fait que les exécutables ne peuvent pas être exécutés sous 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 résultant ne peut pas être exécuté sur Windows XP. Lorsque J'essaie de L'exécuter sur Windows XP, j'obtiens le message d'erreur "[Executable Path] is not a valid Win32 Application.".

selon Microsoft Visual Studio 11 ne supporte pas Windows XP.

comment fonctionne le fait que l'exécutable résultant ne puisse pas être exécuté sur Windows XP? Est-il rien de spécial à l'intérieur de l'exécutable?

31
demandé sur Norbert Willhelm 2011-10-09 13:07:05

4 réponses

ils semblent laisser tomber le support pour les systèmes plus anciens dans chaque nouvelle version de VS (NT4, 2000, XP) même si vous n'utilisez pas le CRT du tout, ils forcent toujours la version du sous-système PE à des nombres élevés. Vous pouvez contourner ce problème en changer les chiffres 5.0 dans un post étape de génération. Le simple fait de changer ces nombres devrait permettre à l'exe de démarrer sur XP à moins que le nouveau CRT utilise des fonctions WinAPI qui n'existent pas sur XP.

L'autre alternative si vous voulez garder l'utilisation de VS11 est d'utiliser des compilateurs multi-ciblage et plus anciens...

20
répondu Anders 2012-03-04 03:29:51

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

cibler Windows XP avec C++ dans Visual Studio 2012

"plus tard cet automne, Microsoft fournira une mise à jour à Visual Studio 2012 qui permettra aux applications C++ de cibler Windows XP. Cette mise à jour apportera les modifications nécessaires au compilateur, à l'exécution et aux bibliothèques Visual C++ 2012 pour permettre aux développeurs de créer des applications et des DLLs qui tournent sous Windows XP. et des versions supérieures ainsi que Windows Server 2003 et supérieures."

Modifier: Ce qui est arrivé (ouf!)

8
répondu RichieHindle 2013-06-19 07:00:59

la solution est d'utiliser un Platform Toolset, qui reliera une version différente de CRT et produira des binaires compatibles avec des systèmes d'exploitation plus anciens.

Voir ici: cible Windows XP dans Visual Studio 11 Beta en utilisant le compilateur et les bibliothèques de Visual Studio 2010.

v90 toolset votre binaire sera capable de fonctionner même dans les systèmes plus anciens, tels que Windows 2000.

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

4
répondu Roman R. 2012-06-18 10:16:46

les bibliothèques runtime livrées avec VS 2010 et les versions supérieures renforcent votre exécutable pour importer deux nouvelles fonctions à partir de kernel32.dll qui manque sur Windows XP:EncodePointer et DecodePointer. Ceux-ci sont nécessaires pour encore un autre bête tentative naïve d'améliorer la "sécurité"du logiciel.

dans VS 2010 il y a une option pour utiliser les bibliothèques runtime de Visual Studio 2008, qui résout ce problème. Je ne sais pas si il y a une option dans les versions ultérieures de VS.

1
répondu valdo 2012-06-18 10:15:55