что System.getProperty(“os.name”) возвращает в последнем Windows OSs

часть моего кода перестала работать в x64, я начинаю рыть, и это происходит из-за некоторого кода, который называет собственный материал через Runtime.getRuntime () .exec ()...

Но этому коду, вероятно, некоторые годы, он не принимает во внимание более новую ОС, и часть кода похожа на это:

String osName = System.getProperty("os.name");
    if (osName.equals("Windows NT") || osName.equals("Windows 2000") || osName.equals("Windows XP")) {
        cmd = new String[3];
        cmd[0] = WINDOWS_NT_2000_COMMAND_1;
        cmd[1] = WINDOWS_NT_2000_COMMAND_2;
        cmd[2] = command;
    } else if (osName.equals("Windows 95") || osName.equals("Windows 98") || osName.equalsIgnoreCase("Windows ME")) {
        cmd = new String[3];
        cmd[0] = WINDOWS_9X_ME_COMMAND_1;
        cmd[1] = WINDOWS_9X_ME_COMMAND_2;
        cmd[2] = command;

Я хотел бы зафиксировать это для всего нового OSs (w2008, окна 7...), но у меня нет доступа к хосту каждого вида, и я не хочу устанавливать в VM только для наблюдения значения, кто-либо знает о некотором списке где-нибудь? не имейте находят любого все же.

Править: Мне было бы нужно: окна 7, окна 2003, окна 2008, окна 2008R2 кроме того, я не 1.6u18 так никакое беспокойство об ошибке, которую упомянули некоторые парни.

20
задан Persimmonium 1 March 2010 в 17:54
поделиться

5 ответов

Скорее всего, вы могли бы изменить код, чтобы сказать

if (osName.equals("Windows 95") || osName.equals("Windows 98") || osName.equalsIgnoreCase("Windows ME")) {
    cmd = new String[3];
    cmd[0] = WINDOWS_9X_ME_COMMAND_1;
    cmd[1] = WINDOWS_9X_ME_COMMAND_2;
    cmd[2] = command;
}
else {
    cmd = new String[3];
    cmd[0] = WINDOWS_NT_2000_COMMAND_1;
    cmd[1] = WINDOWS_NT_2000_COMMAND_2;
    cmd[2] = command;
}
6
ответ дан 30 November 2019 в 00:59
поделиться

Я имел дело с этим в Symantec, когда Visual Cafe был еще жив ... Я не рекомендую делать это вообще так. Проблема в том, что разные поставщики могут поставлять разные строки. Я бы предложил использовать специфический для ОС способ определения платформы.

Вы можете использовать утилиту «ver» в Windows и «uname» в системах типа Unix.

Возможно, лучше использовать GetNativeSystemInfo в Windows, но для этого потребуется собственный код.

Причина, по которой я предлагаю этот способ, а не полагаться на метод System.getProperty, заключается в том, что в этом случае вам нужно иметь дело только с базовой ОС, а не с JVM, находящейся поверх ОС - и это устраняет проблему, когда разные виртуальные машины сообщают разные вещи для одной и той же платформы.

РЕДАКТИРОВАТЬ: Очевидно, вам придется попробовать разные способы получения информации, поскольку для некоторых из них может потребоваться запуск оболочки, а не только команда. Но если вы придерживаетесь bash, все будет хорошо. В основном попробуйте запускать команды, пока одна из них не сработает ... некрасиво, но это сработает.

5
ответ дан 30 November 2019 в 00:59
поделиться

Нет списка, но в Windows7 с JDK6_u18:

os.name = "Windows 7"

Примечание: была ошибка в JFK6_u14 и ранее , где отображалось:

«Windows Vista» вместо «Windows 7» (хотя ОС на самом деле была «Windows 7»), поэтому будьте осторожны!

Согласно this HowTo , это должна быть Windows 2003 для W2003.

2
ответ дан 30 November 2019 в 00:59
поделиться

В зависимости от версии Java, которую вы используете, я обнаружил эту ошибку:

http://bugs.sun.com/view_bug .do? bug_id = 6819886

, так что если вы используете последнюю версию JDK, она должна возвращать Windows 7 нормально.

Не уверен насчет Windows Server 2008, я предполагаю Windows Server 2008 .

Здесь достаточно полный список:

http://mindprod.com/jgloss/properties.html#OSNAME

2
ответ дан 30 November 2019 в 00:59
поделиться

Поскольку новые версии должны требовать того же, что и строка NT, возможно, имеет смысл проверить старые версии и использовать настройки NT вместо проверки новых версий, примерно так:

String osName = System.getProperty("os.name");
if (osName.equals("Windows 95") || osName.equals("Windows 98")
        || osName.equalsIgnoreCase("Windows ME")) {
    cmd = new String[3];
    cmd[0] = WINDOWS_9X_ME_COMMAND_1;
    cmd[1] = WINDOWS_9X_ME_COMMAND_2;
    cmd[2] = command;
} else {
    cmd = new String[3];
    cmd[0] = WINDOWS_NT_2000_COMMAND_1;
    cmd[1] = WINDOWS_NT_2000_COMMAND_2;
    cmd[2] = command;
}
2
ответ дан 30 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: