我非常喜歡SysInternals實用程序(例如Process Explorer)處理64位兼容性的方式。它看起來像32位可執行文件中嵌入64位版本,並在必要時提取它。任何可用於將32位/ 64位可執行文件打包在一起的工具?
我想要一個可以自動執行此操作的工具 - 即採用32位和64位可執行文件,以某種方式將它們打包在一起,並根據它運行的平臺插入存根代碼以啓動正確的可執行文件。
在我開始推出自己的產品之前,有沒有人知道這樣的東西已經存在?
我非常喜歡SysInternals實用程序(例如Process Explorer)處理64位兼容性的方式。它看起來像32位可執行文件中嵌入64位版本,並在必要時提取它。任何可用於將32位/ 64位可執行文件打包在一起的工具?
我想要一個可以自動執行此操作的工具 - 即採用32位和64位可執行文件,以某種方式將它們打包在一起,並根據它運行的平臺插入存根代碼以啓動正確的可執行文件。
在我開始推出自己的產品之前,有沒有人知道這樣的東西已經存在?
打擾 - 我搜索時沒有找到該帖子。儘管如此,它並沒有真正回答我的問題 - 修改了我的標題,使其更清晰。 – snowcrash09 2009-07-23 09:50:18
不是工具已經覆蓋(雖然它在細節上相當淺),但似乎很容易嵌入到你的可執行文件在VC++項目作爲資源,並在檢查操作系統環境後運行正確的。
使用IsWow64Process函數來檢測32或64位,這裏有一個很好的寫法,包括如何嵌入可執行文件的源代碼:http://www.codeproject.com/KB/winsdk/binaryresources.aspx。
雖然這是可能的,但我認爲這是一種糟糕的做法,因爲大多數這些應用程序(例如Process Explorer)會在工作目錄中提取該文件。如果您想將程序放在「程序文件」文件夾中,則該目錄與只讀目錄發生衝突。
對我來說,將兩個程序分開併爲x86文件創建快捷方式似乎更容易。如果該版本檢測到64位,則只需啓動x64文件。
如果您有充分的理由將這兩者結合起來,那麼將其嵌入資源似乎是一條正確的道路。
Here is a guide來編譯一個AutoIT腳本來完成這項工作,儘管您無法控制包裝&存根啓動器如何工作。
我將在這裏重現AutoIt腳本的情況下,鏈接消失:
; Check if we’re on 64-bit OS…
If EnvGet(「PROCESSOR_ARCHITEW6432″)=」」 Then
; No we’re not – run x86 version…
FileInstall(「D:\Support\ETrustCheck_x86.exe」,@TempDir & 「\ETrustCheck_x86.exe」)
RunWait(「D:\Support\ETrustCheck_x86.exe」,@TempDir & 「\ETrustCheck_x86.exe」)
FileDelete(@TempDir & 「\ETrustCheck_x86.exe」)
Else
; Yes we are – run x64 version..
FileInstall(「D:\Support\ETrustCheck_x64.exe」,@TempDir & 「\ETrustCheck_x64.exe」)
RunWait(「D:\Support\ETrustCheck_x86.exe」,@TempDir & 「\ETrustCheck_x64.exe」)
FileDelete(@TempDir & 「\ETrustCheck_x64.exe」)
EndIf
; The END
該腳本可以通過AutoIt腳本編輯器爲32位的發射與包裝成它的兩個可執行文件包裹。
沒有人能夠識別出這樣做的打包工具,所以我接受了我發現最有用的答案。 – snowcrash09 2009-08-02 16:01:59