2010-01-31 45 views
2

我正在写一个应该在16 \ 32 \ 64位系统上运行的小工具。 我的旧实用程序通过将16位版本压缩到32位并在visual studio 2008(/STUB -MS-DOS Stub File Name)中应用/stub开关,在32位和16位上运行。一个单一的可执行文件为32位和64位(没有WOW64)

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

可能吗?

+0

如果它可以运行在32位,为什么你需要它运行在64位如果可能? – 2010-01-31 10:54:18

+0

@Karlsen:它针对不同的机器。我需要它运行在无法运行32位代码的x64机器上。 – Eldad 2010-01-31 12:00:23

+0

您定位的是哪个64位操作系统,无法运行32位代码? – Joe 2010-01-31 14:18:10

回答

3

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

+0

所以没有解决方案? 我需要为x64和x32保留2个不同的可执行文件吗? – Eldad 2010-01-31 11:57:25

+0

与拥有DOS存根的方式不同。 – 2010-01-31 12:02:33

+0

我很乐意听到另一种解决方案。 – Eldad 2010-01-31 12:03:24

2

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

+0

这就是我打算做的。 问题依然存在:我怎样才能让这个启动器在32位和64位机器上都能工作。 – Eldad 2010-01-31 11:56:43

+1

使启动程序成为一个普通的x86 exe文件,就是这样。 从该启动程序检测到32位或64位胜利,并运行适当的util版本或更适合你的东西。 – LILkillaBEE 2010-02-02 10:10:56

+0

但是这个启动程序不能在没有安装WOW64的x64位上工作。我错了吗? – Eldad 2010-02-03 10:06:29

0

Windows 32位通过wowexec.exe运行16位应用程序,而Win64通过wow64运行32位应用程序。所以没有w64,你的程序不可能在Windows上创建一个通用启动程序。 (注意:Mac OSX无论如何都支持多个体系结构)

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

+0

安装程序是不可能的。在去安装解决方案之前,我宁愿选择两种不同的可执行文件。 – Eldad 2010-02-01 11:44:13