我希望能够预测应用程序的默认安装位置。在 64 位机器上,如果是 32 位应用程序,它将安装在“Program Files (x86)”中,如果是 64 位应用程序,它将安装在“Program Files”中。
我的目标是使用默认位置安装应用程序并验证安装是否正常。但为此,我需要知道它将安装在哪里。如果我知道应用程序是为什么架构构建的,我认为它会达到我的目的。
我希望能够预测应用程序的默认安装位置。在 64 位机器上,如果是 32 位应用程序,它将安装在“Program Files (x86)”中,如果是 64 位应用程序,它将安装在“Program Files”中。
我的目标是使用默认位置安装应用程序并验证安装是否正常。但为此,我需要知道它将安装在哪里。如果我知道应用程序是为什么架构构建的,我认为它会达到我的目的。
如果您可以使用外部工具,那么GNUfile
是最通用的解决方案。但为此目的可能有点矫枉过正。其他替代方案是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 脚本
下载file
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
您应该能够从您使用的任何开发平台获取此命令的返回值。