Which XP version does Visual Studio 2012 supports [As Target OS] - c++

Which version of windows XP does Visual Studio 2012 supports.
[Edit: Which version does VS12 supports compiling to]
I found this article:
http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx
That states that it supports XP SP3. But I didn't find any information for VS12 update 4.
Also, If the code I compile using VS12 doesn't crush on XP SP2 and seems to work.
Is it safe to use it? why not?
Thanks

It's correct, Visual Studio 2012 can compile binaries compatible with Windows XP SP3.
You need to install the Platform Toolset v110_xp and select it in the general configuration properties of your project.
If "safe" means that it works the answere is yes. We have 12.000 installations of our software compiled with Visual Studio 2012 (and recently Visual Studio 2013) perfectly working on Windows XP SP3.
The only big problem is run time debugging: you can't install Visual Studio 2012 on Windows XP so it could be a problem to find bugs that accidentally happens only on Windows XP.

Related

Targeting Windows XP using Build Tools 2015 without Visual Studio

I installed Visual C++ Build Tools 2015 on my machine running Windows 7.
In Windows SDK 8.1 and 10 there is no Windows XP targeting platform support.
It was introduced in Windows SDK 7.1A, but I can't find the download for it. It is also included in Visual Studio 2012 Update 4, but I would rather not install Visual Studio for it.
Is there any way to target Windows XP (v110_xp) using only Build Tools 2015?
I think SDK 7.1 + Visual Studio 2010 were the last version to support XP without having to install an additional taget Windows SDK 7.1. But it is tricky to install old versions of that SDK if you have installed more recent version of VS. Also VS2010 doesn't have complete support for the C++11 since it predates that.
Since SDK 8 the compilers are not included, and should be installed from VS Express and/or Community. See this if you want to compile C++11 code tagetting XP Configuring C++ 11 Programs for Windows XP. If I recall correctly the _xp taget was not included in the RTM version, and you should install the SP1.

What's the difference between Platform Toolsets v140 and v140_xp?

What's the difference between the Platform Toolsets ending in _xp and those that don't. (For example, v140 vs v140_xp)
Why aren't there toolsets ending with _vista or _7? When I compile a program on Windows 7 with the v140 toolset, will it run on Windows XP/Vista?
Starting with Visual Studio 2012 its default toolset (v110) didn't support Windows XP anymore. So you were only able to create programs for Windows Vista und newer.
The Visual Studio developers got many protest from the users, because the users have their own customers, which were still using Windows XP.
So the Visual Studio developers introduced v110_xp in Visual Studio 2012 Update 4, which also supports Windows XP.
With all later Visual Studio versions (2013 -> v120, 2015 -> v140) they continued this approach, so you have an extra toolset for Windows XP and newer (v120_xp and v140_xp).
If you create programs, which shall only be used on Windows Vista or newer, then you should use the default toolset (without the _xp suffix). But if you need your programs to run under Windows XP then you need to use the toolset with _xp suffix.

How to target Windows XP in Microsoft Visual Studio C++ [duplicate]

This question already has answers here:
MSVCP140.dll missing
(4 answers)
Closed 6 years ago.
I'm using Microsoft Visual Studio 2015 on Windows 8.1. I want to compile a program targeting Windows XP. I've looked it up on Google and other similar questions, but none helped. In the solution settings, target platform toolset is set to the Windows XP one, but there is no option for Windows XP in the target platform version.
I did read https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx (Using the Windows Headers) and added these lines to my program:
#define WINVER _WIN32_WINNT_WINXP
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#define NTDDI_VERSION NTDDI_WINXP
But it still doesn't work. It says that it can't find "MSVCP140.dll". After I got this dll, it begins to complain about can't find "VC140.dll". After that is "ucrtbased.dll", and then finally "api-ms-win-core-string-11-1-0.dll", which I don't even have it in my Windows 8.1 computer. The program can run on Windows 8.1, but not Windows XP.
What can I do to make the program run on Windows XP?
In order to build a Windows XP compatible EXE with VS 2015 (or VS 2012 / VS 2013) you have to use the v140_xp Platform Toolset rather than the default v140 Platform Toolset.
UPDATE: Note that VS 2017 includes support for Windows XP via v141_xp. For VS 2019, this feature is no longer being updated but you can still install the v141_xp toolset to use with the VS 2019 IDE.
See your Project Properties, the General page:
This is because the default Platform Toolset uses the Windows 8.1 SDK (or you can opt into the Windows 10 SDK), and this only supports building applications for Windows Vista or later. When you select the v140_xp Platform Toolset, you are using a version of the Windows 7.1 SDK which was the last version to support targeting Windows XP or Windows Server 2003.
Note that Visual Studio can target Windows XP Service Pack 3 or Windows Server 2003 Service Pack 2. The C/C++ Runtime is not compatible with older versions of Windows.
If you are using DirectX in your app, this has some profound implications because a lot changed between the Windows 7.1 SDK and the Windows 8 SDK. See this post for details.
With VS 2015, you will also need to select the Windows XP support in the Custom Install options or via Programs & Features / Microsoft Visual Studio 2015 / Change... / Modify:
It sounds like the program runs fine on your development machine (Windows 8.1 + MSVS 2015), but doesn't run on an XP machine.
SOLUTION: you must include the MSVC runtime along with your .exe.
Look here: Deploying Native Desktop Applications (Visual C++)
and here: Visual C++ Redistributable for Visual Studio 2015.
Update from Chuck Walbourn -
Note that in the particular case of VS 2015 Update 3 and VS 2017, you
can use the VS 2017 or 2019 REDIST and it will work fine. See:
VC Runtime in MSVC 2017 is binary compatible with
2015
and
Microsoft Docs: C++ binary compatibility between Visual Studio
2015, 2017, and
2019.
And to repeat - your "setup" should include a compatible MSVC runtime (aka "VCRedist").

Visual Studio 2015: building with the Windows XP toolset selected still results in "not a valid win32 application" error on XP

Visual Studio 2015 supports building C++ programs for Windows XP. According to the article Configuring C++11 Programs for Windows XP, enabling this support is simply a matter of selecting the appropriate platform toolset in the project properties.
This does not work in my case. A simple "hello world" program written in C++ and compiled in Visual Studio Community 2015 (version 14.0.24720.00 Update 1) with the platform toolset set to Visual Studio 2015 - Windows XP (v140_xp) and the platform set to x86/Win32 generates the generic "[name of executable] is not a valid Win32 application" error when run on a Windows XP computer.
Any suggestions would be appreciated. I've found a number of questions about similar issues (like these three), but nothing helpful yet.

Build application for windows XP

I need to build application that could run on Windows XP. For this reason I found option Platform Toolset that might be set to Visual Studio 2012 - Windows XP (v110_xp) and definition #define _WIN_VER 0x0501. What does Platform Toolset does and maybe I don't need it if I define _WIN_VER 0x0501?
When you build with VS 2012 using the "v110" Platform Toolset, you are using the VS 2012 compiler and C Runtime building with the Windows 8.0 SDK. This must target Windows Vista or later because the Windows 8.0 SDK does not support building applications for Windows XP or Windows Server 2003. By default it targets Windows 8 or later, but you can set the preprocessor symbol _WIN32_WINNT to 0x0600 for Windows Vista or later, or 0x0601 for Windows 7 or later.
When you build with VS 2012 using the "v110_xp" Platform Toolset, you are using the VS 2012 compiler and C Runtime building with the Windows 7.1A SDK--the last version of the Windows SDK to support targeting Windows XP SP3 / Windows Server 2003 SP2.
Be sure to read this Visual C++ blog post and this DirectX SDK blog post for important information about using the Windows XP Platform Toolsets.
Note: With VS 20123, the "v120" Platform Toolset builds with the VS 2013 compiler, C Runtime, and Windows 8.1 SDK. It defaults to targeting Windows 8.1, but you can set the preprocessor symbol _WIN32_WINNT to 0x0600 for Windows Vista or later, 0x0601 for Windows 7 or later, or 0x0602 for Windows 8 or later. The "v120_xp" Platform Toolset builds with the VS 2013 compiler, C Runtime, and Windows 7.1A SDK.
It's just toolset. Maybe you installed only visual studio 2012, and if so you could see Visual Studio 2012 (v110) and Visual Studio 2012 - Windows XP (v110_xp).
In my case, I use several version of visual studio, so I can see Visual Studio 2008 (v90), Visual Studio 2010 (v100), etc. If I select Visual Studio 2008 (v90), the program is compiled with vs2008, even if I'm working on vs2012.
At first, VS2012 doesn't support windows xp, so its toolset also doesn't support windows xp. But after many developers ask MS to support winxp, MS adds a toolset for winxp, v110_xp. So you should use v110_xp toolset if you want to build application for windows xp.
Maybe you don't need set _WIN_VER, because vs2012 already defined it over Windows Vista at least.