Как получить значение "os.name" для Windows 10 в Java?
У меня возникла проблема с определением имени операционной системы в 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 ответ(ов)
Я столкнулся с той же проблемой и использовал следующее решение:
Команда 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". Надеюсь, это поможет!
Хм... Не могу точно сказать, связано ли это с обновлением 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, а не к самой ОС.
Что такое параметры -Xms и -Xmx при запуске JVM?
Регистрация нескольких хранилищ ключей в JVM
Почему компилятор Java 11 использует invokevirtual для вызова приватных методов?
Что нельзя сделать в Dalvik VM (ВМ Android), но можно в Sun VM?
Настройка переменных окружения в Windows 10 для использования java и javac