【问题标题】:xxxxxx.exe is not a valid Win32 applicationxxxxxx.exe 不是有效的 Win32 应用程序
【发布时间】:2012-07-03 13:45:36
【问题描述】:

我在 Visual Studio 2012 RC 中有一个小型 C/C++ 项目

此应用程序解析 argv,然后使用 ShellExecute 调用另一个 .exe 文件

我的应用程序在 Windows7 上运行完美,但在 Windows XP x86 上运行不是有效的 Win32 应用程序错误。

我用多线程(/MT)和Win32平台编译过

这是我的#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>

谢谢

【问题讨论】:

  • 您是否编译了 x64 应用程序?
  • “另一个 exe”是 64 位应用程序吗?你是否为你的 32 位环境重新编译了它?
  • @user 虽然这是一个很晚的评论,但您是否检查过是否设置了 "Configuration Properties -&gt; Linker -&gt; System -&gt; Subsystem" ?如果为空,请将其设置为适当的选项,在 XP 上重建并检查可执行文件。
  • @user 在检查了我上面的评论后,如果仍然出现同样的错误,install the updateMSFT 最近发布了。

标签: c++ c windows visual-studio-2012


【解决方案1】:

我在 Windows XP 上运行使用静态版本的 Qt 5.7.0 (MSVC 2013) 构建的应用程序时遇到了同样的问题。

将以下行添加到项目的 .pro 文件中解决了它:

QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01

【讨论】:

    【解决方案2】:

    对我来说,这有帮助: 1.配置属性/General/Platform Toolset = Windows XP (V110_xp) 2.C/C++预处理器定义,添加“WIN32” 3. 链接器/系统/最低要求版本 = 5.01

    【讨论】:

      【解决方案3】:

      我在powershell中启动VS2013 32位控制台应用程序时遇到了这个问题,在cmd中启动它没有出现这个问题。

      【讨论】:

        【解决方案4】:

        现在是 2013 年 2 月,我现在可以通过以下设置在 VS2012 中定位 XP:

        项目属性 -> 常规 -> 平台工具集到:

        Visual Studio 2012 - Windows XP (v110_xp)

        您必须在您的应用程序中重新分发 msvcp110.dll 库等,这些库位于:"&lt;Program Files&gt;\Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.CRT\"


        使用 Visual Studio 2015 更新 2015 年 8 月

        现在似乎有很多选择。我能够使用 Visual Studio 2015 - Windows XP (v140_xp) 设置在 VS2015 中编译应用程序。为了让它真正在 Win XP 上运行,我必须部署(与应用程序一起复制)msvcr100.dll 用于发布版本和 msvcr110.dllmsvcr100d.dll em> 用于调试构建(请注意,数字 100 和 110 存在差异,调试库 msvcr100d.dll 可能无法再分发)

        【讨论】:

        • 这很有帮助,谢谢。值得注意的是,如果您转到 c/C++ => 代码生成 => 运行时库并选择在您的 crt 中编译,则不需要重新分发 dll。例如。使用 /MT 选项。
        • 现在 MSVC 2015 和 2017 不支持 CRT 的静态链接。
        【解决方案5】:

        我相信如果您的项目所针对的框架版本未安装在您要部署到的服务器上,我相信也会引发此错误。

        【讨论】:

          【解决方案6】:

          虽然选择的答案是正确的,然后 noelicus 提供了有关 v110_xp 平台工具集的正确更新,但还有一个问题可能会导致这种行为。

          mahesh 已经在他的评论中发布了关于问题的说明,我想强调这一点,因为我花了几天时间苦苦挣扎,然后自己找到了。

          因此,如果您在“配置属性 -> 链接器 -> 系统 -> 子系统”中有一个空白,您仍然会在 XP 和 Win2003 上收到“无效的 Win32 应用程序”错误,而在 Win7 上它可以正常工作而不会出现这个烦人的错误。一旦我放置了子系统:控制台,错误就消失了。

          【讨论】:

          • 我通过清除链接器/系统/子系统得到一点,认为它会落入默认值。它有效,但仅适用于 Vista+。用“不是有效的 Win32 应用程序”错误破坏 XP。感谢@andrey 记录。
          【解决方案7】:

          VS 2012 应用程序无法在 Windows XP 下运行。

          请参阅此VC++ blog,了解为什么以及如何使其发挥作用。

          似乎从 2013 年 2 月开始支持/可能。请参阅 noelicus answer below 了解如何做。

          【讨论】:

          • 是的,但它会eventually。我正在为那些可能在明年某个时候看到答案的人添加此评论,这应该是可能的。
          • 这个问题似乎也出现在RTM中。
          • 对未来的用户很有帮助。 Update released to support XP
          • 仅链接答案。死链接 = 死答案。
          【解决方案8】:

          至少有两种解决方案:

          1. 您需要安装 Visual Studio 2010,然后从 Visual Studio 2010 中,查看 -> 解决方案资源管理器 -> 右键单击​​您的项目 -> 从上下文菜单中选择属性,您将获得窗口“您的项目名称”属性页-> 配置属性 -> 常规 -> 平台工具集,选择“Visual Studio 2010 (v100)”。
          2. 您需要Windows XP Targeting with C++ in Visual Studio 2012 中描述的Visual Studio 2012 Update 1

          【讨论】:

          • Visual Studio 2012 Update 2012 似乎没有解决这个问题。 Microsoft 是否已发布修复程序?我正在使用 QT 项目,因此无法设置平台工具集(请参阅此问题:stackoverflow.com/questions/14657766/…),所以我有点卡住了。
          • @gollumullog 你好,我对 QT 不熟悉,为什么不能更改 Platform Toolset?
          • QT 项目的“属性页”与普通 Visual Studio 项目不同。基本上他们使用 qmake.exe 来生成一组 makefile。我尝试按照“blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx”上的命令行说明进行操作,但它对我不起作用。如果我找到解决方案,我将发布到上述问题。干杯
          • 我修复了我的问题,QT 的命令行更改为:win32 { QMAKE_LFLAGS += /SUBSYSTEM:CONSOLE,5.01 QMAKE_CXX += /D_US​​ING_V110_SDK71_ LIBS *= -L"%ProgramFiles(x86)%/ Microsoft SDKs/Windows/7.1A/Lib" INCLUDEPATH += "%ProgramFiles(x86)%/Microsoft SDKs/Windows/7.1A/Include" }
          猜你喜欢
          • 2013-12-07
          • 2013-11-03
          • 2017-04-16
          • 2019-03-02
          • 2016-12-07
          • 2021-10-15
          • 2011-06-23
          • 2017-03-28
          相关资源
          最近更新 更多