Feedback

Version des Betriebssystem

Sprache: C#

[b]Gibt die Version des Windows OS als string zurück.[/b] [u]Info :[/u] Alle Version unter Windows Vista werden niemals angezeigt, da das entsprechende Framework dort nicht installiert werden kann. Zur Vollständigkeit wurden sie dennoch hinzugefügt. (.NET4.5/VS2012) auf Berufung von : http://www.gaijin.at/lstwinver.php
public static string GetWindwosClientVersion()
        {
            int major = System.Environment.OSVersion.Version.Major;
            int minor = System.Environment.OSVersion.Version.Minor;
            int build = System.Environment.OSVersion.Version.Build;
            

            if (major == 4 && minor == 0 && build == 950)
                return "Win95 Release 1";
            else if (major == 4 && minor == 0 && build == 1111)
                return "Win95 Release 2";
            else if (major == 4 && minor == 3 && (build == 1212 || build == 1213 || build == 1214))
                return "Win95 Release 2.1";
            else if (major == 4 && minor == 10 && build == 1998)
                return "Win98";
            else if (major == 4 && minor == 10 && build == 2222)
                return "Win98 Second Edition";
            else if (major == 4 && minor == 90)
                return "WinMe";
            else if (major == 5 && minor == 0)
                return "Win2000";
            else if (major == 5 && minor == 1 && build == 2600)
                return "WinXP";
            else if (major == 6 && minor == 0)
                return "Vista";
            else if (major == 6 && minor == 1)
                return "Win7";
            else if (major == 6 && minor == 2 && build == 9200)
                return "Win8 | Win8.1";
            else if (major == 6 && minor == 2 && build == 9600)
                return "Win8.1 Update 1";
            else if (major == 10 && minor == 0 && build == 10240)
                return "Win10";
            else
                return "Can not find os version.";
        }
public static string GetWindwosClientVersion()
        {
            int major = System.Environment.OSVersion.Version.Major;
            int minor = System.Environment.OSVersion.Version.Minor;
            int build = System.Environment.OSVersion.Version.Build;
            

            if (major == 4 && minor == 0 && build == 950)
                return "Win95 Release 1";
            else if (major == 4 && minor == 0 && build == 1111)
                return "Win95 Release 2";
            else if (major == 4 && minor == 3 && (build == 1212 || build == 1213 || build == 1214))
                return "Win95 Release 2.1";
            else if (major == 4 && minor == 10 && build == 1998)
                return "Win98";
            else if (major == 4 && minor == 10 && build == 2222)
                return "Win98 Second Edition";
            else if (major == 4 && minor == 90)
                return "WinMe";
            else if (major == 5 && minor == 0)
                return "Win2000";
            else if (major == 5 && minor == 1 && build == 2600)
                return "WinXP";
            else if (major == 6 && minor == 0)
                return "Vista";
            else if (major == 6 && minor == 1)
                return "Win7";
            else if (major == 6 && minor == 2 && build == 9200)
                return "Win8 | Win8.1";
            else if (major == 6 && minor == 2 && build == 9600)
                return "Win8.1 Update 1";
            else if (major == 10 && minor == 0 && build == 10240)
                return "Win10";
            else
                return "Can not find os version.";
        }

9 Kommentare

  1. So weit ich das mitbekommen habe, ist die API-Funktion, die im Hintergrund die Versionsnummer liefert, seit Windows 8.1 deprecated und liefert nur 6.2 als Version (Windows 8.0). Mann muss entweder im Manifest Windows 8.1 explizit als unterstützte Windows-Version angeben oder mit den Ersatz-API-Funktionen arbeiten.
    Über WMI wird weiterhin die korrekte Versionsnummer ausgelesen. Mal schauen, ob das in Windows 9 auch noch der Fall ist…

  2. Also mir wird ordnungsgemäß „win8.1“ geliefert. (.NET 4.5/VS 2013)
    Trotzdem sollte man die Methode static und wahrscheinlich auch public machen. So braucht man weder eine Klasseninstanz noch x-mal den selben Code.

    Ich habe eben nochmal nachgeschaut. Intern wird die GetVersion bzw. GetVersionEx-Methode verwendet:
    http://referencesource-beta.microsoft.com/#mscorlib/system/environment.cs#67900ccbbcff63a2
    Laut MSDN sind die beiden Funktionen erst [b]nach[/b] Win8.1 nicht mehr up-to-date. Allerdings verhält es sich dann wahrscheinlich so, dass die Frameworks auf dem neueren Windows ensprechende Updates bekommen und somit andere Funktionen aufrufen.

  3. @Koopakiller:
    Bei mir wird mit .Net 3.5 nur Version 6.2 unter Windows 8.1 geliefert:
    System.Environment.OSVersion.Version: 6.2.9200.0
    Vielleicht wird mit VS2013 die Anwendung entsprechend „gemanifist…“ ääh „gemanifestet“:

    With the release of Windows 8.1, the behavior of the GetVersion API has changed in the value it will return for the operating system version. The value returned by the GetVersion function now depends on how the application is manifested.

  4. @Patrick: Entweder das oder dir fehlt ein Update 😉 Mit VS 2010 sieht es bei mir genauso aus, mit VS 2013 und .NET 3.4 klappt aber alles.
    Wie auch immer, solange nicht win98 heraus kommt bin ich schon zufrieden.

    PS: Das hab‘ ich das letzte mal vergessen, die ersten 4 else if sind verdreht.

  5. Korrekturen wurden eingearbeitet und auf den neusten Stand gebracht.
    Test’s werden in kürze durchgeführt.

  6. Ich habe den Code auf Windows 10 (Version 10, Build 10240), VS 2015 getestet, leider liefert der Code trotz Manifest-Datei Win8 als Ergebnis zurück. Leider kenne ich mit der Materie nicht so gut aus um den Fehler zu beheben. M$ hat wohl leider ein wenig zu viel unter der „Haube“ geschraubt. Gibt man in der CMD set ein, steht z.B. folgendes: OS=Windows_NT