В отношении System.getProperty("os.name") я наткнулся на нечто действительно загадочное. Согласно ошибка Java по этому поводу и примечания к выпуску Java 5 (поиск «os.name»), в ранних версиях Vista «longhorn» была ошибка в Java, которую следовало исправить в v5 версии 10.
Однако на моем компьютере с Vista SP1 - при использовании как v5 версии 15, так и версии 6 v6 - System.getProperty("os.name") возвращает "Windows XP". Далее System.getProperty("os.version") возвращает «5.1». Я не могу найти ничего, связанного с этой проблемой через Google. Это заставляет меня задаться вопросом, не странно ли это с моей установкой Vista. Я попытался вызвать функцию API GetVersionEx () из тестовой программы на C, и она возвращает основную версию 6, младшую 0 (как я и ожидал при установке Vista).
Кто-нибудь еще сталкивался с этой проблемой, знает об исправлении или имеет какие-либо предложения о том, как я могу ее обойти без использования JNI?




Фактический номер версии Windows 2000 был 5.0. Windows XP была 5.1. Версия Vista предположительно 6.0, так что ваша тестовая программа работает правильно. Мне кажется, что Java определенно ошибается.
Возможно, вам придется полагаться на JNI, чтобы получить правильный ответ. Я как бы предполагаю, что вы уже спрашивали себя, почему вам может потребоваться изменять поведение вашей программы в зависимости от того, используете ли вы XP или Vista.
Ответ на вопрос, почему мне нужно менять поведение, прост: символические ссылки. Они есть в Vista, а не в XP;)
Возможно, Java работает в режиме совместимости с XP. В этом случае Vista подделает номер версии Windows, заставив Java поверить, что она работает на XP. Проверьте вкладку совместимости исполняемого файла.
Вы гений сэр! :) Я запускал Eclipse в режиме совместимости, поскольку функция автоматической прокрутки в Vista делает Eclipse практически непригодным для использования. В результате он также запускал любой Java-код, который я запускал из Eclipse, в режиме совместимости. Он сообщает, что Vista просто отлично с отключенным режимом совместимости: D
Это помогло мне разобраться, почему наш продукт возвращал неправильные значения. Ошибка java, исправленная в 6u14 ... жаль, что мы все еще поставляем с 6u13 = D