在Java中,如何确定另一个进程或可执行文件是32位还是64位

在Java中,如何确定另一个进程或可执行文件是32位还是64位,java,32bit-64bit,Java,32bit 64bit,Java是否有可以知道进程或.exe文件是32位还是64位的API可供调用? -不是运行代码的JVM没有用于确定外部进程是32位还是64位的标准Java API 如果您想这样做,您可能需要使用本机代码,或者调用一个外部实用程序来完成这项工作。在这两种情况下,解决方案可能都是特定于平台的。以下是一些可能的(特定于平台的)潜在客户: (OSX) (Linux) (窗口) (请注意,在Windows情况下,解决方案涉及测试“.exe”文件而不是运行的进程,因此您需要能够首先确定相关的“.exe”文

Java是否有可以知道进程或.exe文件是32位还是64位的API可供调用?
-不是运行代码的JVM

没有用于确定外部进程是32位还是64位的标准Java API

如果您想这样做,您可能需要使用本机代码,或者调用一个外部实用程序来完成这项工作。在这两种情况下,解决方案可能都是特定于平台的。以下是一些可能的(特定于平台的)潜在客户:

  • (OSX)

  • (Linux)

  • (窗口)


(请注意,在Windows情况下,解决方案涉及测试“.exe”文件而不是运行的进程,因此您需要能够首先确定相关的“.exe”文件…

Java没有任何标准API允许您确定程序是32位还是64位

但是,在Windows上,您可以使用(假设已安装平台SDK)
dumpbin/headers
。调用此函数将产生有关所讨论文件的各种信息,其中包括有关文件是32位还是64位的信息。在输出中,在64位上

8664 machine (x64)
14C machine (x86)
在32位上,您会得到如下内容

8664 machine (x64)
14C machine (x86)

您可以阅读更多关于或on的其他方式的信息。

我用Java for Windows编写了一个方法,它可以查看与
dumpbin
相同的标题,而无需在系统上安装它(基于)


看看其他进程是32位还是64位?或者检查运行的JVM是否为32/64位?查看Windows中的其他进程,而不是JVM。我发现这非常类似@芒果-这是类似的,但它只涵盖了你的问题的一半。。。我也发现了这个,它描述了可执行(图像)文件的结构。通过将exe文件放入java的fileInputStream中并查找PE(可移植可执行文件,PE),我能够提取exe文件的位大小(0x8664为64位,0x14c为32位)。PE正在消耗4字节的数据,即“PE null”。exe文件的位大小正好在PE的4个字节之后。对于Windows,我总是使系统环境变量“PROCESSOR_ARCHITECTURE”处于静默状态。如果它返回x86,则表示您正在运行32位Windows。@TheBlastOne-但这解决了另一个问题。。。确定这个过程使用的是什么架构。是的,对……只是提一下+1'd,并认为这可能有用。实际上是一个exe文件。可能是dumpbin/headers将有助于执行此操作感谢您的建议。我已经试过了,它在VisualStudiocmd中工作。