【问题标题】:How do I determine whether an application I am installing is 32-bit or 64-bit?如何确定我正在安装的应用程序是 32 位还是 64 位?
【发布时间】:2010-12-23 22:07:14
【问题描述】:

我希望能够预测应用程序的默认安装位置。在 64 位机器上,如果是 32 位应用程序,它将安装在“Program Files (x86)”中,如果是 64 位应用程序,它将安装在“Program Files”中。

我的目标是使用默认位置安装应用程序并验证安装是否正常。但为此,我需要知道它将安装在哪里。如果我知道应用程序是为什么架构构建的,我认为它会达到我的目的。

【问题讨论】:

    标签: x86 x86-64 executable 32bit-64bit


    【解决方案1】:

    如果您可以使用外部工具,那么GNU file 是最通用的解决方案。但为此目的可能有点矫枉过正。其他替代方案是Dependency Walker、Sysinternals 的Sigcheck、MSVC 的垃圾箱或corflags……但可能会让很多人感到惊讶的是7zip。它内部有一个类似于file 的小型实用程序,可以与l 选项一起使用

    C:\>7z l "C:\Program Files (x86)\Windows Photo Viewer\ImagingDevices.exe" | findstr CPU
    CPU = x86
    
    C:\>7z l "C:\Program Files\Windows Photo Viewer\ImagingDevices.exe" | findstr CPU
    CPU = x64
    

    如果您必须自己检查,请在文件中偏移 0x3C 处读取 2 个字节。然后将此值加 4 并在该偏移处读取 2 个字节,这将指示架构。例如,在下面的示例中,文件在偏移量 0x3C 处包含 0x00E0。在偏移量 0x00E0 + 4 = 0x00E4 包含 0x8664 表示 64 位二进制。如果它是 32 位 x86 二进制文件,那么它将包含 0x014C

    您可以在以下链接中找到更多方法。还有其他可用于此目的的 PowerShell 和 VBS 脚本

    【讨论】:

      【解决方案2】:

      下载file for Windows 以查看 Windows 上任何文件的详细信息:

      http://gnuwin32.sourceforge.net/packages/file.htm

      然后,通过 Windows 命令行:

      C:\> "C:\Program Files\GnuWin32\bin\file" name-of-file.exe
      name-of-file.exe executable for MS Windows (GUI) Intel 80386 32-bit
      

      您应该能够从您使用的任何开发平台获取此命令的返回值。

      【讨论】:

      • 谢谢。但是对于我用于安装的 microsoft 安装程序包 (.msi),它不会返回任何内容,除了 -- "Microsoft Office Document"。
      猜你喜欢
      • 2011-04-16
      • 2011-07-03
      • 2010-10-23
      • 2014-11-27
      • 2014-05-06
      • 2010-11-27
      • 2013-02-23
      • 2011-04-04
      • 2011-07-06
      相关资源
      最近更新 更多