.exe 在 Windows XP 上不是有效的 Win32 应用程序

Posted

技术标签:

【中文标题】.exe 在 Windows XP 上不是有效的 Win32 应用程序【英文标题】:.exe is not a valid Win32 application on Windows XP 【发布时间】:2013-05-03 13:54:28 【问题描述】:

我正在使用 Visual Studio 2012 Professional 并使用高级安装程序(第 3 方)创建安装程序。

当我在 Windows XP 上运行已安装的 .exe 时,我收到以下消息:

.exe 不是有效的 Win32 应用程序。

安装的可执行文件在 Windows 7 和 8 上都能正常工作。

如何让程序在 Windows XP 上运行?

【问题讨论】:

它可能正在寻找 .NET 4.5 框架,它在您的 Win XP 机器上不存在。 @AlexBell 可能,或者可能是架构问题。这个 .exe 是编译成 x86 还是 x64 的? 如果可能,重新定位您的应用程序以使用 Net Framework 4.0 @Adrian 我目前正在使用任何 CPU 架构......!我应该用什么来代替任何 cpu...? 【参考方案1】:

从 Visual Studio 命令提示符运行以下命令:

 Dumpbin.exe /headers c:\where\you\put\it\setup.exe

其中“setup.exe”是安装程序创建者创建的安装程序 EXE。我将在此处发布您看到的重要信息的示例:

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            6.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

子系统版本号很重要。 VS2012 是第一个开始将此值设置为 6.00(Vista 的版本号)的 Visual Studio 版本。以前的版本以及面向 .NET 4.0 或更早版本的 VS2012 会将此版本号设置为 4.00

否则,这是一项重要的举措,也是逐步取消对 XP 的支持的一部分。 Windows 6.00 及以上版本、Vista、Win7 和 Win8 关注这个数字。他们会假设您的程序不知道以后的 Windows 功能,并且需要打开多个 appcompat 填充程序。最值得注意的是 Aero 中的 appcompat,这是一个桌面主题,显示带有粗边框的窗口,易于用鼠标单击。 Windows 会在这些边界上撒谎,告诉您您的窗口比实际的要小。对于试图使窗口相互对齐的程序员来说,这是一个很大的困惑。

看到显示 6.00 的后果是您的安装程序无法再在 XP 上运行。它是 5.02 版。

所以首先请确保您以 .NET 4.5 为目标,它不适用于 XP。请改用 4.0。如果您仍然遇到问题,请联系供应商的支持并询问他们如何控制该工具创建的 setup.exe 文件中的该数字。一种解决方法是运行带有 /SUBSYSTEM 选项的 Editbin.exe 来更改数字。

【讨论】:

使用 Windows Server 2012,我发现 editbin.exe 没有帮助。在我的解决方案中,我使用 IExpress.exe(system32 版本)将 Install.msi 打包到带有 frameworknet40 的 setup.exe 中。虽然每个 dll 都是用 x86 编译的,包括 Install.msi,但 IExpress 将机器设置为 x64(来自 dumpbin.exe 中的 FILE HEADER VALUES 的结果)。只有当我在 Win XP 32 位机器上使用 IExpress.exe 时,我才能创建有效的 setup.exe。【参考方案2】:

我对 Visual Studio 很陌生,所以我不确定是否添加了以下选项 最近,但 Visual Studio 2013 有一个向后兼容选项可以合并 目标列表中的 Win_XP。下图有帮助:

然后当我运行dumpbin 命令时,我得到了以下结果。

所以现在的应用程序,在正常情况下,可以在 Windows XP 中运行。 希望这有帮助。

【讨论】:

谢谢,这对我有帮助(构建一个基于 C 的小型 exe)。也许你可以编辑你的答案来解释文本中的设置,以防有人看不到图像。【参考方案3】:

实际上 .NET 4.5 框架只生成 Window 6.0 或更高版本兼容 EXE。而在你的情况 XP 属于 windows 5.0 版 therofre,你会得到这个错误。 T

解决您的问题的简单方法是,目标是 .NET 4.0 或更低版本。

Thanks to Hans Passant

【讨论】:

以上是关于.exe 在 Windows XP 上不是有效的 Win32 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Vista 和 Windows 7 中的 OLEDB JET 错误,而不是 XP

Prebuild 事件在 Windows 7 中有效,在 XP 中失败

XP系统有一个setup.exe不运行

Windows XP上的Git sh.exe进程分叉问题,慢吗?

wix 生成的引导程序不是有效的 NT 应用程序

怎么在xp sp2 iis服务上使用多线程???