xxxxxx.exe is not a valid Win32 application
Solution 1
VS 2012 applications cannot be run under Windows XP.
See this VC++ blog on why and how to make it work.
It seems to be supported/possible from Feb 2013. See noelicus answer below on how to.
Solution 2
It's Feb 2013, and I can now target XP in VS2012 by setting:
Project Properties -> General -> Platform Toolset to:
Visual Studio 2012 - Windows XP (v110_xp)
You will have to redistribute the msvcp110.dll libraries et al with your application, which are found here: "<Program Files>\Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.CRT\"
Update Aug 2015 with Visual Studio 2015
There seems to be quite a selection now. I was able to compile application in VS2015 using Visual Studio 2015 - Windows XP (v140_xp) setting. To make it actually run on Win XP I had to deploy (copy alongside application) msvcr100.dll for Release build and msvcr110.dll and msvcr100d.dll for Debug build (note there is a difference in numbers 100 and 110, also debug lib msvcr100d.dll may not be redistributable)
Solution 3
While seleted answer was right time ago, and then noelicus gave correct update regarding v110_xp platform toolset, there is still one more issue that could produse this behaviour.
A note about issue was already posted by mahesh in his comment, and I would like to highlight this as I have spend couple of days struggling and then find it by myself.
So, if you have a blank in "Configuration Properties -> Linker -> System -> Subsystem" you will still get the "not valid Win32 app" error on XP and Win2003 while on Win7 it works without this annoying error. The error gone as soon as I've put subsystem:console.
Solution 4
There are at least two solutions:
- You need Visual Studio 2010 installed, then from Visual Studio 2010, View -> Solution Explorer -> Right Click on your project -> Choose Properties from the context menu, you'll get the windows "your project name" Property Pages -> Configuration Properties -> General -> Platform toolset, choose "Visual Studio 2010 (v100)".
- You need the Visual Studio 2012 Update 1 described in Windows XP Targeting with C++ in Visual Studio 2012
Solution 5
I had the same issue on Windows XP when running an application built with a static version of Qt 5.7.0 (MSVC 2013).
Adding the following line to the project's .pro file solved it:
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
user525717
Updated on July 09, 2022Comments
-
user525717 almost 2 years
I have small C/C++ project in Visual Studio 2012 RC
This applications parses the argv and then calling another .exe file with
ShellExecute
My application works perfect on Windows7 but on Windows XP x86 trhows Is not a valid Win32 application error.
I have compiled it with Mutli-thread(/MT) and Win32 Platform
This is my #includes
#include <string> #include <iostream> #include <Windows.h> #include <fstream> #include <cstdio> #include <vector> #include <windowsx.h> #include <shlobj.h> #include <stdio.h> #include <tchar.h> #include <direct.h>
Thanks
-
Christian.K almost 12 yearsYes, but it will eventually. I'm adding this comment, for those that might see answer sometime next year, where it should be possible.
-
rekire over 11 yearsThis problem seems to appear in the RTM too.
-
Mahesh over 11 yearsHelpful for future users. Update released to support XP
-
gollumullog over 11 yearsVisual Studio 2012 Update 2012 doesn't seem to fix this issue. Have Microsoft issued a fix yet? I am using a QT project so can't set the Platform Toolset ( see this question: stackoverflow.com/questions/14657766/… ), so I'm a little stuck.
-
Alessandro Jacopson over 11 years@gollumullog Hi, I am not familiar with QT, why can't you change the Platform Toolset?
-
gollumullog about 11 yearsQT projects have a different "Property Page" than normal Visual Studio projects. Basically they use qmake.exe to generate a set of makefiles. I tried following the command line instructions on "blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx" but it isn't working for me. If I find a solution I'll post to the above question. Cheers
-
gollumullog about 11 yearsI fixed my issues, the command line changes for QT are: win32 { QMAKE_LFLAGS += /SUBSYSTEM:CONSOLE,5.01 QMAKE_CXX += /D_USING_V110_SDK71_ LIBS *= -L"%ProgramFiles(x86)%/Microsoft SDKs/Windows/7.1A/Lib" INCLUDEPATH += "%ProgramFiles(x86)%/Microsoft SDKs/Windows/7.1A/Include" }
-
TooTone almost 11 yearsThat's v helpful thanks. It's worth noting you don't need to redistribute the dlls if you go to c/C++ => Code Generation => Runtime Library and choose to compile in your crt. E.g. with the /MT option.
-
CoreyStup almost 8 yearsI got bit by clearing Linker/System/Subsystem thinking that it would fall to the default. It works, but only on Vista+. Breaks XP with the "Not a valid Win32 app" error. Thanks @andrey for documenting.
-
Raindrop7 over 6 yearsNow MSVC 2015 and 2017 don't support the static linking for the CRT.
-
Martin Schneider almost 3 yearsLink only answer. Dead link = dead answer.