xxxxxx.exe is not a valid Win32 application

105,915

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) Targeting Windows XP with Visual Studio 2015

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:

  1. 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)".
  2. 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
Share:
105,915
user525717
Author by

user525717

Updated on July 09, 2022

Comments

  • user525717
    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
    Christian.K almost 12 years
    Yes, but it will eventually. I'm adding this comment, for those that might see answer sometime next year, where it should be possible.
  • rekire
    rekire over 11 years
    This problem seems to appear in the RTM too.
  • Mahesh
    Mahesh over 11 years
    Helpful for future users. Update released to support XP
  • gollumullog
    gollumullog over 11 years
    Visual 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
    Alessandro Jacopson over 11 years
    @gollumullog Hi, I am not familiar with QT, why can't you change the Platform Toolset?
  • gollumullog
    gollumullog about 11 years
    QT 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
    gollumullog about 11 years
    I 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
    TooTone almost 11 years
    That'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
    CoreyStup almost 8 years
    I 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
    Raindrop7 over 6 years
    Now MSVC 2015 and 2017 don't support the static linking for the CRT.
  • Martin Schneider
    Martin Schneider almost 3 years
    Link only answer. Dead link = dead answer.