Определить систему выполнения для выполнения процесса из Java-программы - PullRequest
1 голос
/ 03 сентября 2010

Я пытаюсь вызвать собственные исполняемые файлы из Java-программы. У меня есть три exe-файла, один для win32, другой для Linux 32-bint и третий для Linux 64-bit, теперь, прежде чем я смогу вызвать нужный исполняемый файл, мне нужно определить, на какой платформе запускается программа. Я могу определить Операционную систему, просто получив системное свойство "os.name", но не знаю, как определить, является ли она 32-битной или 64-битной платформой?

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Вот некоторые соответствующие Системные свойства со значениями на моем компьютере:

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.

Дляполный справочник, см .:

0 голосов
/ 03 сентября 2010

Я не думаю, что это возможно без собственных вызовов (например, для запроса реестра), но вы можете использовать системное свойство os.arch для определения разрядности JRE, в которой в данный момент выполняется приложение.

(если кто-то запустит 32-битную JRE на 64-битной машине, вы получите x64, так что вы не знаете, работаете ли вы на 64-битной архитектуре, поэтому следует вызывать 32-битную версию - но наоборот можете смело вызывать 64-битную версию вашего нативного приложения).

Другим способом может быть грубое принуждение: Почему сейчас всегда пытаются запустить 64-битную версию, а в случае ошибки использовать вместо нее 32-битный двоичный файл?

...