判断安装的应用程序是64位还是32位的快速方法


107

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

有没有一种快速的方法来确定应用程序是作为64位应用程序还是作为32位应用程序构建/编译的?

默认情况下,要在程序文件(x86)中安装一个程序。我猜这意味着它是32位版本。我不得不让它与Oracle数据库进行通信,并且要使其正常工作,我最终将其重新安装在目录路径中,该目录路径中没有括号“(”和“)”,因为这引起了问题。我还安装了64位和32位Oracle客户端。

供将来参考,我希望能够键入命令“ xxxx fred.exe”,并告诉我fred.exe是否需要32位或64位设置(例如ODBC数据源等)。


1
如果应用程序位于Progam Files(x86)文件夹中,则绝不能确保该应用程序是64位编译的。这只是大多数安装人员遵循的约定。例如,Chrome 64位(很难)安装到x86文件夹中。
nawfal

Answers:


92

如果运行该应用程序,则在任务管理器中它旁边应该带有* 32表示它是32位的。我很确定他们已经在Server 2003中实现了该功能,但是还不能肯定,希望有人可以澄清一下。

您也可以通过PEiD运行它。PEiD不支持64位PE,因此如果使用64位PE将会阻塞。

还有著名的Windows GNU文件。它将告诉您有关可执行文件的各种信息。

例:

$ 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位可执行文件。


1
非常欢迎您:)
John T

1
任务管理器的替代品可以是Process Explorer,您可以在其中添加Image Type列。如果您要...,可以通过“选项”菜单替换此任务管理器... :-)
Tamara Wijsman 2010年

GNU文件在诸如Process Explorer之类的程序中显示了什么,该程序具有一个32位存根,可以检测到它在64位系统上运行并解压缩要执行的64位映像?
afrazier 2010年

下载并尝试一下吗?
约翰T

2
要从fileGnuWin32 安装,请从gnuwin32.sourceforge.net/packages/file.htm下载上载“ complete package”(而不是“ binaries”)
Panic Panic

40

无需安装其他程序或运行文件的最简单方法是,右键单击该文件,选择“ 属性”,然后转到“ 兼容性”选项卡。如果没有灰色选项,并且提供Windows XP和9x模式,则为32位。如果有灰色选项,并且Vista是最早提供的模式,则为64位。完全不需要启动应用程序。

如果应用程序已经启动,您当然仍然可以使用其他答案中提到的* 32想法。但是,这在Windows 8.x及其新任务管理器中不可用。幸运的是,您可以通过右键单击“ 详细信息”选项卡中的列标题并选择“ 选择列”来启用“ 平台” 。该列将包含“ 32位”或“ 64位”。


听起来足够合理。
ArtOfWarfare 2013年

1
是的,我喜欢这个。我想检查一个文件,不想把下载的废话装满我的笔记本电脑...
Gottlieb Notschnabel 2014年

* 32通知在Windows 8的任务管理器中不可用,但具有“平台”列,默认情况下不可见。见7tutorials.com/…–
皮诺

谢谢@Pino。在使用Windows 8的过程中,我从来没有任何理由要弄清楚这一点。(当HD崩溃时,我又回到了Windows 7,我意识到我从未使用过任何W8应用程序。)我将更新答案。
2015年

25

如果安装了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。


有趣且详细的方法,我真的需要重新开始编程,+ 1。
约翰T

18

如果您有一个十六进制编辑器程序,只需用它打开文件,然后在标准标题介绍性内容之后不久(例如“此程序无法在DOS模式下运行...”),您将看到

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

要么

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


我将Total Commander用作文件管理器,因此对我来说,这是最简单的解决方案。我可以按F3来查看文件的开头并立即获得答案。
mivk 2012年

1
w,他们实际上将“ 64”“ 86”写为可读字节,以指示64位。多么丑陋:)
Nyerguds

@Nyerguds为什么很难看?它被称为hexspeak,非常常用,尤其是 在魔术数字。例如,facebook的IPv6是*:FACE:B00C:*
phuclv

根本不一样。您只是在谈论十六进制的leetspeak。这实际上是使用数字100表示​​“ 64”,因为它看起来像十六进制的6和4。
Nyerguds

@Nyerguds字符串“ 6486”以十六进制表示,这显然十六进制的,您在其中读取十六进制数字作为字符。当您将0xD用作D时,它看起来像D,那么0xDEADBEEF怎么了?如果丑陋,那么BCD也是丑陋的,您实际上使用数字100表示​​64
phuclv

5

替代文字EXE资源管理
器适用于OS / 2,NE,PE32,PE32 +和VxD文件类型的可执行文件资源管理器。

该应用程序基于MiTeC便携式可执行阅读器。它读取并显示可执行文件的属性和结构。它与PE32(便携式可执行文件),PE32 +(64位),NE(Windows 3.x新建可执行文件)和VxD(Windows 9x虚拟设备驱动程序)文件类型兼容。.NET可执行文件也受支持。

它列举了由Borland编译器编译的文件的引入的类,使用的单元和形式。

注意:它带有GUI,可让您“探索” Windows二进制文件结构。
可悲的是,它似乎甚至没有接受从命令行打开目标二进制文件。但是它提供的细节在某些情况下可能有用。


3

您可以检查使用sigcheck.exe哪个是Sysinternals Suite的一部分,例如

$ 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

1
这也适用于DLL。
user34660'9

2

另一种简单的方法是使用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

Dependency Walker 是一个有用的GUI工具,不仅可以验证exe文件,还可以验证DLL文件。64位DLL或EXE文件旁边将带有一个64图标。


1
filever /bad *.exe

WAMD64或W32i或W16将在第一列中。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.