3

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

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

可能吗?

4

3 回答 3

3

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

于 2010-01-31T10:37:27.923 回答
2

您应该将 32 位和 64 位实用程序打包到另一个 exe 的资源中,我们称其为 32 位启动器。然后你的启动器应该检测它是从哪个系统启动的,然后从它的资源中提取正确的二进制文件并启动它。

于 2010-01-31T10:45:26.643 回答
0

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

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

于 2010-02-01T01:20:23.400 回答