解决VC11程序在XP下“不是有效的Win32应用程序”问题

当你运行一些新版程序(比如用 VC2012/VC11 默认情况下编译出来的程序)在XP上运行出现“不是有效的Win32应用程序”时,

如果是你自己的项目,你可以更新微软提供的更新包以支持 Windows XP Target 功能。

但是面对没有源代码的项目或是无法迁移的项目,又想让其在 XP 下运行,可以通过修改 PE 头来解决此问题(本方法全球首发,秒杀一切)。

不是有效的 Win32 应用程序

 问题所在:

在新版VC编译出来的程序,不支持运行在 XP 之下,其根本原因是 PE 头中的最低系统版本限制。

我们可以使用 PE Explorer 程序查看。

修改PE头解决不是有效的Win32应用程序问题

我们可以看到,其操作系统版本号为 6.0,即其最低支持运行的系统为 Windows Vista,自然 XP 下无法运行。(附: Windows XP 为 5.1,2003 为 5.2)

也就是我们只要把 操作系统版本、子系统版本 这两项 同时修改为 5.1,就可以去掉 “不是有效的 Win32 应用程序” 问题   [前提是程序中不能有 Windows XP 以后才有的 API]。

解决方案:

既然是在 PE 头中,我们只要用一般的十六进制编辑器来修改即可。(我用的 FlexHex)。

首先打开样本工程,找到 PE 头位置:

解决不是有效的 Win32 应用程序

然后把 06 00 00 (6.0) 修改为  05 00 01 (5.1)即可。

解决不是有效的 Win32 应用程序

保存即可,这样程序就可以在 XP 下运行(一般来说,如果你用了高版本 API 的话那就没办法了)。

目前我已经用此办法将 VC2012 编译器 移植到了 XP 下(原发布在易语言论坛)。

移植实例:VC 2012 链接器 For XP 下载:

下载地址:点击去下载


10 responses to “解决VC11程序在XP下“不是有效的Win32应用程序”问题”

  1. 全球首发。。。你网站好像挂了一段时间

    1. 是的,用 Apache 不稳定,所以自己研制了一套“Web 服务器”。 ❗

  2. 看不懂诶,远程调试x64为什么不能用

  3. 我有一个软件,用此法过了第一关(不再显示”不是有效的Win32应用程序”),但变为显示“找不到序数:无法定位序数345于动态链接库COMCTL32.dll上”,请问还能继续破吗?
    谢谢

    1. 看来是不行了,用到了新版 API

Leave a Reply to Suci Cancel reply

Your email address will not be published. Required fields are marked *