.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 中失败