0

Как получить значение "os.name" для Windows 10 в Java?

12

У меня возникла проблема с определением имени операционной системы в Java после обновления с Windows 8.1 до Windows 10. Я использую метод System.getProperty("os.name"), чтобы получить название операционной системы. Ранее для каждой версии Windows этот метод возвращал точное имя ОС, например, Windows XP для XP, Windows Vista для Vista и т.д.

После обновления до Windows 10 с помощью инструмента обновления от Microsoft я заметил, что вызов System.getProperty("os.name") по-прежнему возвращает Windows 8.1:

public class OSTest {
  public static void main(String[] args) {
    System.out.println(System.getProperty("os.name"));
  }
}

Кто-нибудь знает, как можно обойти эту проблему? И также интересно, сохраняется ли такая же ситуация при чистой установке Windows 10, или же эта ошибка вызвана именно обновлением от Microsoft?

2 ответ(ов)

0

Я столкнулся с той же проблемой и использовал следующее решение:

Команда cmd "systeminfo" возвращает строку "OS Name:", которая содержит правильное название операционной системы. Я написал следующую функцию для этой задачи:

private boolean os2k10Check() {
    try {
        Process p = Runtime.getRuntime().exec("systeminfo"); // Выполнение команды cmd "systeminfo"
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) { break; }
            if (line.contains("OS Name:")) { // Если вывод содержит OS Name
                if (line.contains("2010")) {
                    return true; // Если в названии ОС содержится "2010"
                } else {
                    return false;       
                }
            }
        }
    } catch (Exception e) {
        System.out.println("Platform Type: os2010check: exception" + e);
    }
    return false;
}

Эта функция проверяет, является ли операционная система Windows 2010, используя вывод команды "systeminfo". Надеюсь, это поможет!

0

Хм... Не могу точно сказать, связано ли это с обновлением Windows 10 (10.0.17134.590) или с Java 8 (1.8.0_171-b11), но сейчас всё работает корректно: os.name возвращает Windows 10.

Кроме того, если у вас есть сомнения, вы можете проверить os.version. У меня стоит 10.0.

Кстати, я вижу os.arch: amd64. Это относится к JVM, а не к самой ОС.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь