2010-01-31 74 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