使用Visual Studio 11编译的可执行文件有什么特别之处,导致无法在Windows XP上执行可执行文件?

时间:2011-10-09 09:07:06

标签: c++ visual-studio windows-xp compatibility visual-studio-2012

我使用Visual Studio 11 Developer Preview编译我的C ++源代码。我静态链接到运行时库。

生成的可执行文件无法在Windows XP上执行。当我尝试在Windows XP上执行它时,我收到错误消息“[可执行路径]不是有效的Win32应用程序。”。

According to Microsoft Visual Studio 11不支持Windows XP。

如何在Windows XP上执行生成的可执行文件?可执行文件中有什么特别的东西吗?

4 个答案:

答案 0 :(得分:21)

他们似乎放弃了对VS的每个新版本(NT4,2000,XP)中旧系统的支持。即使您根本不使用CRT,它们仍会强制PE子系统版本为高数字。您可以在后期构建步骤中通过changing the numbers back到5.0来解决这个问题。只是更改这些数字应该允许exe在XP上启动,除非新的CRT使用的是XP上不存在的WinAPI函数。

如果您想继续使用VS11,另一种选择是使用多目标和较旧的编译器......

答案 1 :(得分:8)

Visual Studio 2012将能够在2012年晚些时候以Windows XP为目标:

Targeting Windows XP with C++ in Visual Studio 2012

“今年秋天晚些时候,微软将提供Visual Studio 2012的更新,使C ++应用程序能够以Windows XP为目标。此更新将对Visual C ++ 2012编译器,运行时和库进行必要的修改以启用开发人员创建在Windows XP及更高版本以及Windows Server 2003及更高版本上运行的应用程序和DLL。“

修改:现在已经发生了(p!)

答案 2 :(得分:4)

解决方法是使用不同的Platform Toolset,它将链接不同版本的CRT并生成与旧操作系统兼容的二进制文件。

在此处查看更多内容:Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries

使用v90工具集,您的二进制文件即使在较旧的系统中也能运行,例如Windows 2000。

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

答案 3 :(得分:1)

与VS 2010及更高版本捆绑在一起的运行时库强制执行可执行文件,以从Windows XP中缺少的kernel32.dll导入两个新功能:EncodePointerDecodePointer。这些是另一个 idiotic 天真的尝试,以增强软件“安全性”。

在VS 2010中,可以选择使用Visual Studio 2008的运行时库来解决此问题。我不知道在VS的后期版本中是否有这样的选项。