确定java程序进程执行的运行时系统

发布于 2024-09-16 19:56:24 字数 180 浏览 5 评论 0原文

我正在尝试从 java 程序调用本机可执行文件。我有三个 exe 文件,一个用于 win32,另一个用于 linux 32 位,第三个用于 linux 64 位,现在在我可以调用正确的可执行文件之前,我需要确定程序正在哪个平台上运行。我可以通过简单地获取“os.name”系统属性来确定操作系统,但不确定如何确定它是 32 位还是 64 位平台?

I am trying to call native executables from java program. I have three exe files one for win32, other linux 32-bint and third linux 64-bit, now before I can call the right executable I need to determine which platform program is running on. I can determind Operating system by simply getting "os.name" System property, but not sure how to get determine if it is 32-bit or 64-bit platform?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

就此别过 2024-09-23 19:56:24

以下是一些相关的系统属性以及我的计算机上的值:

os.arch:                 x86
os.name:                 Windows Vista
sun.arch.data.model:     32

从这些信息中,您应该能够猜测如下内容:

String osName     = System.getProperty("os.name").toLowerString();
String dataModel  = System.getProperty("sun.arch.data.model");

boolean isWindows = osName.startsWith("windows");
boolean isLinux   = osName.startsWith("linux"); // or whatever
boolean is32bit   = "32".equals(dataModel);
boolean is64bit   = "64".equals(dataModel);

if(isWindows && is32bit){
    call32BitWindowsLib();
}

//etc.

有关完整的参考,请参阅:

Here are some relevant System properties with the values on my machine:

os.arch:                 x86
os.name:                 Windows Vista
sun.arch.data.model:     32

From this information, you should be able to guess something like this:

String osName     = System.getProperty("os.name").toLowerString();
String dataModel  = System.getProperty("sun.arch.data.model");

boolean isWindows = osName.startsWith("windows");
boolean isLinux   = osName.startsWith("linux"); // or whatever
boolean is32bit   = "32".equals(dataModel);
boolean is64bit   = "64".equals(dataModel);

if(isWindows && is32bit){
    call32BitWindowsLib();
}

//etc.

For a completer reference, see:

尬尬 2024-09-23 19:56:24

我认为如果没有本机调用(例如查询注册表),这是不可能的,但您可以使用系统属性 os.arch 来确定当前运行应用程序的 JRE 的位数。

(如果有人在 64 位机器上运行 32 位 JRE,您将获得 x64,因此您不知道自己是否在 64 位架构上,因此应该调用 32 位版本 - 但反过来您可以安全地调用您的本机应用程序的 64 位版本)。

另一种方法可能是暴力破解:
为什么现在总是尝试运行 64 位版本,并在出现错误时使用 32 位二进制版本?

I don't think that this is possible without native calls (e.g. to query the registry), but you can use the system property os.arch to determine the bitness of the JRE which is currently running the application.

(if somebody run a 32 bit JRE on a 64 bit machine, you'll get x64, so you're not knowing if you are on a 64bit architecture, so should invoke the 32bit version - but the other way round you can safely call the 64 bit version of your native application).

Another way might be brute forcing:
Why now always trying eto run the 64 bit version, and in case of an error, use the 32 bit binary instead?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文