2

类似这个问题

多年来,我一直在使用 IExpress(Windows 随附)将我的引导程序 EXE 和 .NET 应用程序 MSI 打包成一个自解压安装程序文件。(我的应用是 32 位的,所以我使用了 iexpress.exe 的版本%windir%/SysWOW64

我最近从 Windows 8.1 迁移到了 Windows 10。

在不更改我的代码的任何内容的情况下,在 Windows 10 上使用 IExpress 会导致 EXE 无法在 Windows XP 上运行(获取“[FileName].exe 不是有效的 Win32 应用程序”)

在 Windows 8.1、8 或 7 上使用 IExpress,它工作正常。

任何人都可以阐明或提供解决方案吗?

(我尝试将 iexpress.exe 从 Windows 8(文件版本 11.0.9600.17416)复制到 Windows 10 并使用它,但同样的事情发生了。)

4

1 回答 1

3

是的另一个提醒,XP 真的结束了。当我在 IExpress 生成的 EXE 文件上运行dumpbin.exe /headers时,我看到:

  OPTIONAL HEADER VALUES
       ....
       10.00 operating system version
       10.00 image version
        6.00 subsystem version
       ....

子系统版本号是第一个show-stopper,6.00是Vista的版本号。这是可以修复的,你可以运行Editbin.exe用 /SUBSYSTEM 选项来改变它,XP 是 5.01

操作系统和映像版本是更大的问题,无法使用 Editbin.exe 解决。实际上不确定 XP 对其价值给予了多少关注,获得 10.00 是非常新的。我没有XP的机器了,试试吧。

复制旧版本的 IExpress.exe 是不够的。它使用 c:\windows\syswow64\makecab.exe 来实际完成工作。我看到一些粗略的证据表明它是 EXE 标头内容的实际来源。不要一味地把那个EXE复制到windows目录下,那样太冒险了。保持分开。

解决这个问题的明智方法是在自己的机器或虚拟机上保留 XP 的可引导副本。无论如何,您都需要它来解决特定于 XP 的客户问题。支付仍然必须支持 XP 给客户的麻烦,他们往往会更快地做明智和必要的事情。帮不了你。

于 2016-03-28T14:26:37.563 回答