如何使用Visual Studio 2012编译适用于Windows XP的程序?

24

好的,所以我在Windows 7 x64中使用Visual Studio 2012进行编程和编译。我的应用程序可以正常工作,但当我尝试从Windows XP SP3虚拟机中执行它时,我立即收到“xxxx.exe不是有效的win32应用程序”的错误提示。

该应用程序正在使用静态链接进行编译,也就是说,使用了/MT选项。我已将targetver.exe中的_WIN32_WINNT设置为0x0501;配置管理器设置为Win32,在中设置目标机器为MACHINEX86。

我的targetver.h文件如下:

#include <winsdkver.h>

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
#define NTDDI_VERSION 0x0501

#include <SDKDDKVer.h>

我还尝试了使用/MD编译并安装.NET Framework,但这也没有帮助。

我一筹莫展,真的需要一些帮助,因为我需要它能在Windows XP上运行。


4
VC++ 2012 RTM不支持WinXP。你是否安装了使用VC++ 2012针对WinXP的CTP?请参阅此博客文章以获取更多信息:http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx。 - ildjarn
噢,这解释了一切。本来可以节省我几个小时试图让它工作的时间。我会查看这些链接的,谢谢。 - WiperWoper
请注意,Visual Studio 不是一种编程语言;它是一个开发环境。它支持许多语言(C#、VB.NET、C++等)。你正在使用的 语言 是 C++,这就是你应该解决问题的东西。通常语言和 IDE 之间有一个重要的区别。:-) - Ken White
是的,我知道,Ken。如果我的问题有任何误导之处,我很抱歉。我并不想说Visual Studio是一种编程语言,我只是想指出它是我的开发环境,正如你所说,因为它似乎是我问题的原因。无论如何,还是谢谢。 - WiperWoper
刚刚尝试了面向WinXP平台的 CTP(希望我上面贴链接的格式没问题),效果完美。看来我不需要再切换回Visual Studio 2010了。非常感谢,如果可以的话我会给你点赞;可惜现在还不能。 - WiperWoper
相关问题,重点关注为什么会发生这种情况:可执行文件有什么特别之处... - Edward Brey
3个回答

24

我在我的应用程序中遇到了同样的问题,但我正在使用Visual Studio 2015。但我不知道如何进行静态链接编译。 - Bart
1
@Bart:使用VC++ 2015,您不需要静态链接(当然,如果您愿意,也可以)。相反,您需要进入项目属性并将“平台工具集”选项更改为“Visual Studio 2015 - Windows XP(v140_xp)”。如果该选项不存在,则需要重新运行VS设置并自定义安装选项以包括WinXP支持。 - ildjarn
1
我不确定过去式形式是否正确(选择假定RTM不可用),但答案不应该是它如何改变的历史记录(这属于修订历史),也不应该有元信息(例如为什么答案改变 - 这就是评论的作用)。答案应该是最好的当前版本。随意还原或将其放入其他形式。 - Peter Mortensen

7

链接已经失效(“您正在寻找的文章已被撤下!”)。 - Peter Mortensen

0

当您生成EXE文件时,32位版本将位于项目文件夹bin\x86\Release中。


在问题提出时(2.5年前),VS 2012(没有任何更新的生产版本)无法直接针对XP系统进行编译。自那时以来的更新早已解决了这个问题。 - Michael Petch
1
@MichaelPetch:更新提供了一个解决方案,但仍需在项目设置中切换工具链。因此它仍然不能“开箱即用”地针对XP系统。 - Ben Voigt
@BenVoigt:我倾向于不同意。这是一个项目设置。这就像说,任何不是项目默认设置的东西都不是开箱即用的。或者说优化不是开箱即用的。如果你必须费力地从微软下载更多文件并将它们集成到环境中,那么我就不认为它们是开箱即用的。例如,出于这个原因,我不认为创建ATL和WTL项目是开箱即用的。 - Michael Petch
@MichaelPetch:好的,我只是在说这是一个我们应该预计会继续出现的问题,因为它不是“默认正确”的。 - Ben Voigt
@BenVoigt:我不反对这一点。我没有因为这个原因投票否决或关闭问题。如果今天问这个问题,答案会不同,因为现在只需要升级他们的VS2012到最新的服务包,并使用项目设置打开所需的行为即可。我晚回复这个帖子是因为这个答案来得晚。 - Michael Petch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接