題 快速判斷已安裝的應用程序是64位還是32位的方法


我在64位Windows Server 2003上安裝了第三方應用程序(在本例中為Cognos Data Manager)。

有沒有一種快速的方法來確定應用程序是作為64位應用程序還是作為32位應用程序構建/編譯的?

默認情況下,程序希望安裝在Program Files(x86)中。我猜這意味著它是一個32位版本。我不得不讓它與Oracle數據庫交談並使其工作我最終在目錄路徑中重新安裝它,其中沒有括號“(”和“)”,因為這導致了問題。我還安裝了64位和32位Oracle客戶端。

為了將來參考,我希望能夠輸入一個命令 “xxxx fred.exe” 並讓它告訴我fred.exe是否需要32位或64位設置(例如ODBC數據源等)。


102
2018-01-31 21:34


起源


如果應用程序位於Progam Files(x86)文件夾中,那麼它絕不能確保應用程序是64位編譯的。這只是大多數安裝人員遵循的慣例。對於例如Chrome 64位安裝到x86文件夾(遺憾的是)。 - nawfal


答案:


如果您運行該應用程序,在任務管理器中它旁邊應該有一個* 32表示它是32位。我很確定他們已經在Server 2003中實現了這一點,但不是積極的,希望有人可以澄清。

你也可以通過它 PEID。 PEiD不支持64位PE,因此如果它是64位,它將會阻塞。

還有著名的 GNU文件 對於Windows。它會告訴您有關可執行文件的各種信息。

例:

$ file winrar-x64-392b1.exe
winrar-x64-392b1.exe: PE32+ executable for MS Windows (GUI)

$ file display.exe
display.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit</pre>

如您所見,64位WinRAR安裝程序被歸類為PE32 + 表示64位可執行文件。 32位應用程序只是PE32,一個32位可執行文件。


87
2018-01-31 21:37



抓住了GnuFile,效果很好。謝謝。 - Gary
非常歡迎你:) - John T
任務管理器的替代方法可以是Process Explorer,您可以在其中添加Image Type列。通過“選項”菜單,如果您想要...可以替換任務管理器:-) - Tom Wijsman
GNU文件顯示的是Process Explorer等程序,它有一個32位存根,可檢測到它在64位系統上運行並解包64位映像以執行? - afrazier
安裝 file 來自GnuWin32,從中下載'完整包'(而非'二進製文件') gnuwin32.sourceforge.net/packages/file.htm - Colonel Panic


最簡單的方法是,無需安裝其他程序或運行該文件,只需右鍵單擊該文件即可選擇 屬性,然後去了 兼容性 標籤。如果沒有灰色選項,並提供Windows XP和9x模式,則為32位。如果有灰色選項,Vista是最早提供的模式,那麼它是64位。根本不需要啟動應用程序。

如果應用程序已經啟動,您當然仍然可以使用其他答案中提到的* 32想法。但是,Windows 8.x及其新任務管理器中不提供此功能。幸運的是,你可以啟用一個 平台 右鍵單擊列中的列標題 細節 選項卡和選擇 選擇列。該列將根據需要包含“32位”或“64位”。


38
2017-08-24 15:57



聽起來很合理。 - ArtOfWarfare
是的我喜歡這個。我想檢查一個單獨的文件,並不想加載我的筆記本電腦充滿下載的垃圾... - Gottlieb Notschnabel
* 32通知在Windows 8的任務管理器中不可用,但它有一個“平台”列,默認情況下不可見。看到 7tutorials.com/... - Pino
謝謝@Pino。當我使用Windows 8時,我從來沒有任何理由去解決這個問題。(當我的HD崩潰時我回到了Windows 7,我意識到我從未使用任何W8應用程序。)我會更新我的答案。 - trlkly


如果您安裝了Visual Studio或Platform SDK,則可以使用 dumpbin /headers 查看PE頭值。

64位可執行文件的示例:

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
            8664 machine (x64)
               5 number of sections
        4987EDCA time date stamp Tue Feb 03 08:10:02 2009
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
              23 characteristics
                   Relocations stripped
                   Executable
                   Application can handle large (>2GB) addresses

OPTIONAL HEADER VALUES
             20B magic # (PE32+)
            8.00 linker version
           2A600 size of code
           18A00 size of initialized data
               0 size of uninitialized data
           2AE90 entry point (000000000042AE90)
            1000 base of code
               ...

對於32位:

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        4B0C786D time date stamp Wed Nov 25 01:21:01 2009
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             103 characteristics
                   Relocations stripped
                   Executable
                   32 bit word machine

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            9.00 linker version
           42000 size of code
            4000 size of initialized data
           6F000 size of uninitialized data
           B0EE0 entry point (004B0EE0)
           70000 base of code
               ...

文件頭中的第一個值告訴您體系結構:x86為0x14C,x64為0x8664。


25
2018-01-31 22:20



有趣而詳細的方法,我真的需要再次開始編程,+ 1。 - John T


如果您有一個十六進制編輯器程序,只需打開您的文件,並在標準標題介紹之後不久(例如“此程序無法在DOS模式下運行...”),您將看到

“PE..L”(十六進制代碼:504500004C)= 32位

要么

“PE..d†”(十六進制代碼:504500006486)= 64位


18
2017-08-27 00:49



我使用Total Commander作為我的文件管理器,所以對我來說,這是一個最簡單的解決方案。我可以按F3查看文件的開頭並立即得到答案。 - mivk
Ew,他們實際上寫了“64”“86”作為人類可讀的字節,表示64位。多醜啊 - Nyerguds
@Nyerguds為什麼難看?它被稱為 hexspeak 並且是非常常用的,尤其是在魔術數字。例如,facebook的IPv6是 *:FACE:B00C:* - phuclv
那根本不一樣。你只是在談論hex leetspeak。這實際上使用數字100表示​​“64”,因為它看起來像一個6和4的十六進制。 - Nyerguds
@Nyerguds字符串“6486”是十六進制的,顯然 是 hexspeak,其中您將十六進制數字作為字符讀取。當你對D使用0xD時,0xDEADBEEF有什麼問題,因為它看起來像D?如果它很難看的話 BCD 在你真正使用數字100表示​​64的情況下也是醜陋的 - phuclv


alt textEXE Explorer
OS / 2,NE,PE32,PE32 +和VxD文件類型的可執行文件資源管理器。

此應用程序基於 MiTeC便攜式可執行讀卡器。它讀取並顯示可執行文件屬性和結構。它與PE32(可移植可執行文件),PE32 +(64位),NE(Windows 3.x新可執行文件)和VxD(Windows 9x虛擬設備驅動程序)文件類型兼容。也支持.NET可執行文件。

它列舉了由Borland編譯器編譯的文件的引入類,用過的單元和表單。

注意:它附帶一個GUI,讓您“探索”Windows二進製文件結構。
可悲的是,它似乎甚至不接受從命令行打開的目標二進製文件。 但它給出的細節在某些情況下可能會有用。


5
2017-09-03 14:56





你可以查看使用 sigcheck.exe 這是其中的一部分 Sysinternals套房,例如

$ sigcheck.exe some_app.exe

Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

C:/Program Files (x86)/Foo App\some_app.exe:
    Verified:   Signed
    Signing date:   14:48 23/12/2015
    Publisher:  X
    Company:    X
    Description:    X
    Product:    Some App
    Prod version:   5.0.0.1241
    File version:   5.0.0.1241
    MachineType:    32-bit

3
2018-05-09 10:17



這也適用於DLL。 - user34660


另一種簡單的方法是使用PESnoop:

C:\> pesnoop photoshop.exe /pe_dh


-------------------------------------------------------------------------------
 PESnoop 2.0 - Advanced PE32/PE32+/COFF OBJ,LIB command line dumper by yoda
-------------------------------------------------------------------------------

Dump of file: photoshop.exe...
Modus:        64bit Portable Executable Image...
...

獲得PESnoop的一個地方是: http://www.prestosoft.com/download/plugins/PESnoop.zip

- 戴夫


2
2018-04-05 04:28





對於GUI愛好者來說,絕對最簡單的方法是安裝此Explorer擴展:

http://www.silurian.com/win32/inspect.htm

- 戴夫


2
2018-04-05 04:57



“安裝失敗”。好極了。 - ArtOfWarfare