Wie kann ich die Windows-Betriebssystemversionen in .net erkennen?
Welchen Code kann ich verwenden?
quelle
Wie kann ich die Windows-Betriebssystemversionen in .net erkennen?
Welchen Code kann ich verwenden?
System.Environment.OSVersion
verfügt über die Informationen, die Sie zur Unterscheidung der meisten Hauptversionen des Windows-Betriebssystems benötigen, jedoch nicht aller. Es besteht aus drei Komponenten, die den folgenden Windows-Versionen zugeordnet sind:
+------------------------------------------------------------------------------+
| | PlatformID | Major version | Minor version |
+------------------------------------------------------------------------------+
| Windows 95 | Win32Windows | 4 | 0 |
| Windows 98 | Win32Windows | 4 | 10 |
| Windows Me | Win32Windows | 4 | 90 |
| Windows NT 4.0 | Win32NT | 4 | 0 |
| Windows 2000 | Win32NT | 5 | 0 |
| Windows XP | Win32NT | 5 | 1 |
| Windows 2003 | Win32NT | 5 | 2 |
| Windows Vista | Win32NT | 6 | 0 |
| Windows 2008 | Win32NT | 6 | 0 |
| Windows 7 | Win32NT | 6 | 1 |
| Windows 2008 R2 | Win32NT | 6 | 1 |
| Windows 8 | Win32NT | 6 | 2 |
| Windows 8.1 | Win32NT | 6 | 3 |
+------------------------------------------------------------------------------+
| Windows 10 | Win32NT | 10 | 0 |
+------------------------------------------------------------------------------+
Für eine Bibliothek , die Ihnen einen vollständigen Überblick über das erhalten können genaue Version von Windows , dass die aktuelle Ausführungsumgebung in ausgeführt wird , überprüfen Sie diese Bibliothek .
Wichtiger Hinweis : Wenn in Ihrem ausführbaren Assemblymanifest nicht ausdrücklich angegeben ist, dass Ihre exe-Assembly mit Windows 8.1 und Windows 10.0 kompatibel ist, System.Environment.OSVersion
wird die Windows 8-Version 6.2 anstelle von 6.3 und 10.0 zurückgegeben! Quelle: hier .
Ich habe dies verwendet, als ich verschiedene Microsoft-Betriebssystemversionen ermitteln musste:
Quelle: hier
quelle
vs.Minor != 0
muss nicht unbedingt seinXP
oder7
. Es kann sich um eine dieser Server-Editionen handeln, die dieselben Nebenversionen haben. Siehe hier msdn.microsoft.com/en-us/library/windows/desktop/…Ich benutze den
ManagementObjectSearcher
of-NamespaceSystem.Management
Beispiel:
Ergebnis:
Dokumentation
quelle
Wie R. Bemrose vorgeschlagen hat, sollten Sie sich bei Windows 7-spezifischen Funktionen das Windows® API Code Pack für Microsoft® .NET Framework ansehen .
Es enthält eine
CoreHelpers
Klasse, mit der Sie das Betriebssystem bestimmen können, auf dem Sie sich gerade befinden (nur XP und höher, dies ist heutzutage eine Voraussetzung für .NET).Es bietet auch mehrere Hilfsmethoden. Angenommen, Sie möchten die Sprungliste von Windows 7 verwenden. Es gibt eine Klasse
TaskbarManager
, die eine Eigenschaft namens "bereitstellt"IsPlatformSupported
, die unter Windows 7 und höher true zurückgibt.quelle
Sie können diese Hilfsklasse verwenden.
Beispielcode ist hier:
Ich wurde unter folgender Adresse gefunden: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
quelle
Über
Environment.OSVersion
welches "Ruft ein System.OperatingSystem-Objekt ab, das die aktuelle Plattform-ID und Versionsnummer enthält."quelle
Dies alles scheint eine sehr komplizierte Antwort für eine sehr einfache Funktion zu sein:
quelle
Betriebssystemversion erkennen:
quelle
Dies ist eine relativ alte Frage, aber ich musste dieses Problem kürzlich lösen und habe meine Lösung nirgendwo veröffentlicht.
Der einfachste (und meiner Meinung nach einfachste) Weg ist, einfach einen Pinvoke-Aufruf von RtlGetVersion zu verwenden
Wobei die Haupt- und Nebenversionsnummern in dieser Struktur den Werten in der Tabelle der akzeptierten Antwort entsprechen.
Dies gibt die korrekte Windows-Versionsnummer zurück, im Gegensatz zu den veralteten GetVersion- und GetVersionEx-Funktionen von kernel32
quelle
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
Der Rückgabewert ist "Microsoft Windows 10 Enterprise".
quelle
Einweg:
Wickeln Sie dann einfach einen ausgewählten Fall um die Funktion.
quelle
Wie wäre es mit einer Registrierung, um den Namen zu erhalten.
"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion" hat seit Windows XP den Wert ProductName.
Wenn Sie .NET Framework 4.0 oder höher verwenden. Sie können die Is64BitOperatingSystem () -Methode entfernen und Environment.Is64BitOperatingSystem verwenden .
quelle
Erste Lösung
Um sicherzustellen, dass Sie die richtige Version erhalten
Environment.OSVersion
, sollten Sie eineapp.manifest
mit Visual Studio hinzufügen und folgendesupportedOS
Tags auskommentieren :Dann können Sie in Ihrem Code Folgendes verwenden
Environment.OSVersion
:Beispiel
Zum Beispiel wäre in my machine (
Windows 10.0 Build 18362.476
) das Ergebnis wie folgt, was falsch ist :Durch Hinzufügen
app.manifest
und Kommentieren dieser Tags erhalte ich die richtige Versionsnummer:Alternative Lösung
Wenn Sie
app.manifest
Ihrem Projekt nicht gerne etwas hinzufügen möchten, können Sie das verwenden,OSDescription
das seit .NET Framework 4.7.1 und .NET Core 1.0 verfügbar ist.Hinweis: Vergessen Sie nicht, die folgende using-Anweisung oben in Ihre Datei einzufügen.
Weitere Informationen und unterstützte Plattformen finden Sie hier .
quelle
Die obigen Antworten würden mir eine
Major
Version6
unter Windows 10 geben.Die Lösung, die ich gefunden habe, ohne zusätzliche VB-Bibliotheken hinzuzufügen, war folgende:
Ich würde dies nicht als den besten Weg betrachten, um die Version zu erhalten, aber der Vorteil ist, dass dies keine zusätzlichen Bibliotheken sind, und in meinem Fall
"10"
war es gut genug, zu prüfen, ob sie enthalten sind .quelle
Machen Sie das Problem nicht zu kompliziert.
quelle
Major
Teil der Version hätten vergleichen können. Außerdem wird "Win7!" unter einem Windows NT / Me / 98/95-Betriebssystem. Es wird auch nicht gut mit zukünftigen Versionen von Betriebssystemen fertig