转:解决vs2015生成软件在XP中运行时提示“不是有效的WIN32应用程序”

http://blog.csdn.net/d_change/article/details/51824568
http://blog.csdn.net/asanscape/article/details/38752655
https://blogs.msdn.microsoft.com/vcblog/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012/ <-- 备忘

转:解决vs2015生成软件在XP中运行时提示“不是有效的WIN32应用程序”_第1张图片
图片取自CSDN,感谢作者d_change

正文取自CSDN,感谢作者asanscape
http://blog.csdn.net/asanscape/article/details/38752655
《让用VS2012/VS2013编写的程序在XP中顺利运行》
在vs2012/2013版本里面,其自带的c编译器cl.exe,若直接使用cl a.c编译,那么生成出来的exe放在vista及以上版本直接运行没有问题,但是在xp上则会出来“不是有效的win32应用程序”的出错提示。这是因为vs2012/2013自带的c编译器默认情况下生成的exe会默认只支持vista及以上版本的windows系统。

解决方法:

对于使用命令行cl.exe直接编译的方式:
先用cl a.c编译一遍,此时会生成a.exe和a.obj两个文件,此时,再执行 link b.obj /subsystem:console,5.01,它会链接一个新的a.exe出来,此时的exe就可以在xp上运行了。相比vs2010以及以前版本的编译器编译,会多第二步的link过程,后面的参数也很容易理解,subsystem,5.01,此处的5.01是指的windows内核版本号,5.01表示windows 2000 with sp1,即此exe可以在win2000 sp1及以上的windows中执行。

当然,这个地方的/subsystem后面有很多参数,上面给的console,5.01是指命令行程序,如果是有GUI即有窗口的程序,改成windows,5.01即可。

Specify the correct subsystem and subsystem version for the linker based on the type of application you are building. Applications targeting the x86 version of Windows XP must specify subsystem version 5.01, and applications targeting x64 must specify version 5.02.

For x86 console applications:

set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%

For x64 console applications:

set LINK=/SUBSYSTEM:CONSOLE,5.02 %LINK%

对于在vs2013里面使用新建项目的方式:
右击相应的项目,选择“属性”,在项目属性页中的“配置属性”下面的“常规”里面,把“平台工具集”,由“Visual Studio 2013 (v120)”改成“Visual Studio 2013 - Windows XP (v120_xp)”,确定之后,重新生成项目即可。当然这里按这样修改的话,就只能在winxp及以上的版本系统里面运行了。

你可能感兴趣的:(转:解决vs2015生成软件在XP中运行时提示“不是有效的WIN32应用程序”)