2008-11-07 3 views
5

Ich bin über etwas wirklich rätselhaftes über System.getProperty("os.name") gestolpert. Laut a Java bug on the matter und the Java 5 release notes (nach "os.name" suchen) gab es einen Bug in Java mit frühen "Longhorn" -Versionen von Vista, der in Version 5 behoben sein sollte.Warum Java auf einer Vista-Box meldet, dass es auf XP ist?

Allerdings auf meiner Vista SP1 Box - die Verwendung von v5 release 15 und v6 release 6 - System.getProperty("os.name") gibt "Windows XP" zurück. Weiter System.getProperty("os.version") gibt "5.1" zurück. Ich kann jedoch nichts über dieses Problem über Google finden. Das lässt mich fragen, ob es etwas seltsam mit meinem Vista-Setup ist. Ich habe versucht, die GetVersionEx() API-Funktion von einem Test-C-Programm aufrufen und es gibt Hauptversion 6, Minor 0 (wie ich für eine Vista-Installation erwarten würde).

Hat jemand anderes dieses Problem kennengelernt, einen Fix kennen oder Vorschläge dazu haben, wie ich ohne JNI umgehen könnte?

+0

Dies half mir herauszufinden, warum unser Produkt die falschen Werte zurückgegeben hat. Der Java-Bug, in 6u14 behoben ... schade, wir versenden immer noch mit 6u13 = D – GreenKiwi

Antwort

10

Möglicherweise läuft Java im XP-Kompatibilitätsmodus. In diesem Fall wird Vista die Windows-Versionsnummer fälschen, was Java glauben lässt, dass es unter XP läuft. Überprüfen Sie das Kompatibilitätsregister der ausführbaren Datei.

+0

Sie sind ein Genie, mein Herr! :) Ich habe Eclipse im Kompatibilitätsmodus ausgeführt, da die automatische Scrollfunktion in Vista Eclipse fast unbenutzbar macht. Daher wurde auch der von Eclipse im Kompatibilitätsmodus gestartete Java-Code ausgeführt. Es meldet Vista gut mit ausgeschaltetem Kompatibilitätsmodus: D –

0

Die tatsächliche Windows-Versionsnummer von Windows 2000 war 5.0. Windows XP war 5.1. Vista ist angeblich 6.0, damit dein Testprogramm richtig funktioniert. Es hört sich für mich so an, als würde Java das falsch verstehen.

Sie müssen sich möglicherweise auf ein JNI verlassen, um die richtige Antwort zu erhalten. Ich gehe davon aus, dass Sie sich bereits gefragt haben, warum Sie das Verhalten Ihres Programms abhängig davon, ob Sie XP oder Vista verwenden, variieren müssen.

+0

Die Antwort, warum ich das Verhalten variieren muss, ist einfach: Symlinks. Sie existieren in Vista und nicht in XP;) –

+0

Überprüfen Martin Antwort, es ist wirklich gut! –