32和64位的单个可执行文件(没有WOW64)

时间:2010-01-31 10:32:55

标签: 64-bit 32bit-64bit portable-executable

我正在编写一个应该在16 \ 32 \ 64位系统上运行的小实用程序。 我的旧实用程序通过将16位版本压缩到32位并在visual studio 2008中应用/stub开关(/STUB -MS-DOS Stub File Name )来运行32位和16位。

我正在寻找一种方法来对我的64位可执行文件做同样的事情。 目标64位系统是Win PE 64位,它没有安装WOW64。

有可能吗?

3 个答案:

答案 0 :(得分:3)

Windows可执行文件的DOS存根使用MZ部分,而32位和64位可执行文件都使用PE部分。这允许DOS存根存在于Windows可执行文件中,但在尝试组合32位和64位可执行文件时会导致冲突。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

Windows 32位由wowexec.exe运行16位应用程序,Win64通过wow64运行32位应用程序。因此,如果没有wow64,您的程序将无法在Windows上创建通用启动程序。 (注意:Mac OSX无论如何都支持单个二进制中的多个架构)

我能想到的最好的方法是创建一个MSI安装程序包并将两个32/64 exes放入其中。