一个可执行文件适用于32位和64位(无需WOW64)

3
我正在编写一个小型实用程序,应该可以在16位、32位和64位系统上运行。 我的旧实用程序通过将16位版本压缩到32位版本并在Visual Studio 2008中应用/stub开关(/STUB -MS-DOS Stub File Name )来同时运行在32位和16位上。
我正在寻找一种方法来使我的64位可执行文件也能做到这一点。 目标64位系统是Win PE 64位,它没有安装WOW64。
是否可能?

如果它可以在32位上运行,那么为什么需要尽可能让它在64位上运行呢? - Lasse V. Karlsen
@Karlsen:它是针对不同的机器的。我需要它在一个不能运行32位代码的x64机器上运行。 - Eldad
你的目标是什么64位操作系统不能运行32位代码? - Joe
1
Win PE 64位。它没有安装WOW64。 - Eldad
3个回答

3

Windows可执行文件的DOS stub使用MZ部分,而32位和64位可执行文件都使用PE部分。这使得DOS stub可以存在于任何Windows可执行文件中,但在尝试组合32位和64位可执行文件时会发生冲突。


那么这个问题没有解决方案吗? 我必须使用两个不同的可执行文件来支持x64和x32吗? - Eldad
我很乐意听到不同的解决方案。 - Eldad

2
你应该将32位和64位的工具打包到另一个exe文件的资源中,我们称其为启动器32位。 然后你的启动器应该检测它所在的系统,并从其资源中提取适当的二进制文件并启动它。

这正是我计划要做的事情。 问题仍然存在:我如何使此启动器在32位和64位机器上都能正常工作。 - Eldad
1
将启动器制作为普通的x86可执行文件,就这样。 从该启动器中检测32位或64位的Windows,并运行适合您的工具或更好的东西。 - LILkillaBEE
但是这个启动器在没有安装WOW64的x64位上无法工作。我错了吗? - Eldad
根据Ignacio的说法,在尝试合并32位和64位可执行文件时会发生冲突。那么我该如何让这个启动器在不能运行32位应用程序的x64位工作站上运行(例如WinPE 64位)? - Eldad

0

Windows 32位运行16位应用程序需要wowexec.exe,而Win64则通过wow64运行32位应用程序。因此,在Windows上要创建通用启动器,没有wow64是不可能的。(注意:Mac OSX支持单一二进制文件中的多个架构)

我能想到的最好方法是创建一个单一的MSI安装程序包,并将32/64位exe文件放入其中。


安装程序不是一个选择。我宁愿使用两个不同的可执行文件,也不会选择安装程序解决方案。 - Eldad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接