System.Umwelt.OSVersion hat die Informationen, die Sie benötigen für die Unterscheidung der meisten Windows-OS-releases, aber nicht alle. Es besteht aus drei Komponenten, die Karte auf der folgenden Windows-Versionen:
+------------------------------------------------------------------------------+||PlatformID|Major version |Minor version |+------------------------------------------------------------------------------+|Windows95|Win32Windows|4|0||Windows98|Win32Windows|4|10||WindowsMe|Win32Windows|4|90||Windows NT 4.0|Win32NT|4|0||Windows2000|Win32NT|5|0||Windows XP |Win32NT|5|1||Windows2003|Win32NT|5|2||WindowsVista|Win32NT|6|0||Windows2008|Win32NT|6|0||Windows7|Win32NT|6|1||Windows2008 R2 |Win32NT|6|1||Windows8|Win32NT|6|2||Windows8.1|Win32NT|6|3|+------------------------------------------------------------------------------+|Windows10|Win32NT|10|0|+------------------------------------------------------------------------------+
Für eine Bibliothek, die es erlaubt Sie, um eine vollständige Ansicht der genaue Version von Windows, die die aktuelle Ausführungsumgebung ausgeführt wird, überprüfen Sie heraus diese Bibliothek.
EDIT: aktualisiert, mit mehr Versionen von dieser link
BEARBEITEN (2011/03/15): Geändert PlatformID tatsächlichen enum-Werte statt int-Werte geändert Win 7 auf eine 1 minor-Nummer, Dank Kommentar-zeigen Sie es aus (und ich kann nun bestätigen, mit einer Win7-Maschine), einen link zu einer Bibliothek, die helfen können.
BEARBEITEN (2015/07/08): Hinzugefügt Windows 8.1 und 10-Versionen.
Wichtiger Hinweis: wenn Ihre ausführbare assembly-manifest nicht explizit feststellen, dass Ihr exe-assembly ist kompatibel mit Windows 8.1 und Windows 10.0, System.Environment.OSVersion zurückkehren wird Windows 8.0 version ?! die 6.2, statt 6.3 und 10.0!! Quelle: hier ersten Kommentar.
Habe ich dies als ich hatte, um zu bestimmen, verschiedene Microsoft-Betriebssystem-Versionen:
string getOSInfo(){//Get Operating system information.OperatingSystem os =Environment.OSVersion;//Get version information about the os.Version vs = os.Version;//Variable to hold our return valuestring operatingSystem ="";if(os.Platform==PlatformID.Win32Windows){//This is a pre-NT version of Windowsswitch(vs.Minor){case0:
operatingSystem ="95";break;case10:if(vs.Revision.ToString()=="2222A")
operatingSystem ="98SE";else
operatingSystem ="98";break;case90:
operatingSystem ="Me";break;default:break;}}elseif(os.Platform==PlatformID.Win32NT){switch(vs.Major){case3:
operatingSystem ="NT 3.51";break;case4:
operatingSystem ="NT 4.0";break;case5:if(vs.Minor==0)
operatingSystem ="2000";else
operatingSystem ="XP";break;case6:if(vs.Minor==0)
operatingSystem ="Vista";elseif(vs.Minor==1)
operatingSystem ="7";elseif(vs.Minor==2)
operatingSystem ="8";else
operatingSystem ="8.1";break;case10:
operatingSystem ="10";break;default:break;}}//Make sure we actually got something in our OS check//We don't want to just return " Service Pack 2" or " 32-bit"//That information is useless without the OS version.if(operatingSystem !=""){//Got something. Let's prepend "Windows" and get more info.
operatingSystem ="Windows "+ operatingSystem;//See if there's a service pack installed.if(os.ServicePack!=""){//Append it to the OS name. i.e. "Windows XP Service Pack 3"
operatingSystem +=" "+ os.ServicePack;}//Append the OS architecture. i.e. "Windows XP Service Pack 3 32-bit"//operatingSystem += " " + getOSArchitecture().ToString() + "-bit";}//Return the information we've gathered.return operatingSystem;}
Es enthält eine CoreHelpers Klasse, mit denen Sie das Betriebssystem, das Sie derzeit auf (XP und höher nur, es ist eine Voraussetzung für .NETTO-partnerschaftsmodelle)
Es auch mehrere Helfer-Methoden. Angenommen, Sie möchten verwenden Sie die Sprungliste von Windows 7, es ist ein Klasse TaskbarManager bieten, eine Eigenschaft, die man als IsPlatformSupported und es wird true zurückgeben, wenn Sie auf Windows 7 und höher.
string osVer =System.Environment.OSVersion.Version.ToString();if(osVer.StartsWith("5"))//windows 2000, xp win2k3{MessageBox.Show("xp!");}else//windows vista and windows 7 start with 6 in the version #{MessageBox.Show("Win7!");}
Wie wäre es mit einer Registrierung, um den Namen.
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" den Wert ProductName seit Windows XP.
[DllImport("kernel32.dll")]staticexternIntPtrGetCurrentProcess();[DllImport("kernel32.dll")]staticexternIntPtrGetModuleHandle(string moduleName);[DllImport("kernel32")]staticexternIntPtrGetProcAddress(IntPtr hModule,string procName);[DllImport("kernel32.dll")]staticexternboolIsWow64Process(IntPtr hProcess,outbool wow64Process);publicstaticboolIs64BitOperatingSystem(){//Check if this process is natively an x64 process. If it is, it will only run on x64 environments, thus, the environment must be x64.if(IntPtr.Size==8)returntrue;//Check if this process is an x86 process running on an x64 environment.IntPtr moduleHandle =GetModuleHandle("kernel32");if(moduleHandle !=IntPtr.Zero){IntPtr processAddress =GetProcAddress(moduleHandle,"IsWow64Process");if(processAddress !=IntPtr.Zero){bool result;if(IsWow64Process(GetCurrentProcess(),out result)&& result)returntrue;}}//The environment must be an x86 environment.returnfalse;}privatestaticstring HKLM_GetString(string key,string value){try{RegistryKey registryKey =Registry.LocalMachine.OpenSubKey(key);return registryKey?.GetValue(value).ToString()??String.Empty;}catch{returnString.Empty;}}publicstaticstringGetWindowsVersion(){string osArchitecture;try{
osArchitecture =Is64BitOperatingSystem()?"64-bit":"32-bit";}catch(Exception){
osArchitecture ="32/64-bit (Undetermined)";}string productName = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName");string csdVersion = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion");string currentBuild = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuild");if(!string.IsNullOrEmpty(productName)){return
$"{productName}{(!string.IsNullOrEmpty(csdVersion) ? "" + csdVersion : String.Empty)} {osArchitecture} (OS Build {currentBuild})";}returnString.Empty;}
Wenn Sie mit .NET Framework 4.0 oder höher. Sie können entfernen Sie die Is64BitOperatingSystem () - Methode, und verwenden Umwelt.Is64BitOperatingSystem.
Ich die ManagementObjectSearcher des namespace System.Management
Beispiel:
string r ="";
using (ManagementObjectSearcher searcher =newManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")){ManagementObjectCollection information = searcher.Get();if(information !=null){foreach(ManagementObject obj in information){
r = obj["Caption"].ToString()+" - "+ obj["OSArchitecture"].ToString();}}
r = r.Replace("NT 5.1.2600","XP");
r = r.Replace("NT 5.2.3790","Server 2003");MessageBox.Show(r);}
Vergessen Sie nicht, fügen Sie den Verweis auf die Assembly System.Management.dll
und setzen Sie die mithilfe: using System.Management;
publicstaticstring OS_Name(){return(string)(from x innewManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast<ManagementObject>()select x.GetPropertyValue("Caption")).FirstOrDefault();}
System.Umwelt.OSVersion
hat die Informationen, die Sie benötigen für die Unterscheidung der meisten Windows-OS-releases, aber nicht alle. Es besteht aus drei Komponenten, die Karte auf der folgenden Windows-Versionen:Für eine Bibliothek, die es erlaubt Sie, um eine vollständige Ansicht der genaue Version von Windows, die die aktuelle Ausführungsumgebung ausgeführt wird, überprüfen Sie heraus diese Bibliothek.
EDIT: aktualisiert, mit mehr Versionen von dieser link
BEARBEITEN (2011/03/15): Geändert
PlatformID
tatsächlichen enum-Werte statt int-Werte geändert Win 7 auf eine1
minor-Nummer, Dank Kommentar-zeigen Sie es aus (und ich kann nun bestätigen, mit einer Win7-Maschine), einen link zu einer Bibliothek, die helfen können.BEARBEITEN (2015/07/08): Hinzugefügt Windows 8.1 und 10-Versionen.
Wichtiger Hinweis: wenn Ihre ausführbare assembly-manifest nicht explizit feststellen, dass Ihr exe-assembly ist kompatibel mit Windows 8.1 und Windows 10.0,
System.Environment.OSVersion
zurückkehren wird Windows 8.0 version ?! die 6.2, statt 6.3 und 10.0!! Quelle: hier ersten Kommentar.InformationsquelleAutor der Antwort Daniel DiPaolo
Habe ich dies als ich hatte, um zu bestimmen, verschiedene Microsoft-Betriebssystem-Versionen:
Quelle: hier
InformationsquelleAutor der Antwort Gabe
Wie R. Bemrose vorgeschlagen, wenn Sie das tun Windows 7-spezifische features, sollten Sie sich die Windows® API Code Pack for Microsoft® .NET Framework.
Es enthält eine
CoreHelpers
Klasse, mit denen Sie das Betriebssystem, das Sie derzeit auf (XP und höher nur, es ist eine Voraussetzung für .NETTO-partnerschaftsmodelle)Es auch mehrere Helfer-Methoden. Angenommen, Sie möchten verwenden Sie die Sprungliste von Windows 7, es ist ein Klasse
TaskbarManager
bieten, eine Eigenschaft, die man alsIsPlatformSupported
und es wird true zurückgeben, wenn Sie auf Windows 7 und höher.InformationsquelleAutor der Antwort Pierre-Alain Vigeant
Über
Environment.OSVersion
welche "Ruft ein System.Betriebssystem-Objekt, das enthält die aktuelle Plattform-id und Versionsnummer" ein.InformationsquelleAutor der Antwort Gregoire
Immer, wenn jemand fragt "Wie?" Neige ich immer dazu, zu denken, "Warum?"
Wenn Sie erkennen Windows 7 Windows 7-spezifische features, sollten Sie die Windows® API Code Pack for Microsoft® .NET Framework Bibliothek statt.
InformationsquelleAutor der Antwort Powerlord
Diese alle scheinen, wie sehr komplizierten Antworten für eine sehr einfache Funktion:
InformationsquelleAutor der Antwort domskey
einen Weg:
Dann einfach wickeln Sie ein select case um die Funktion..
InformationsquelleAutor der Antwort Darknight
Nicht über-komplizieren das problem.
InformationsquelleAutor der Antwort Ben
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
Den return-Wert "Microsoft-Windows 10 Enterprise -"
InformationsquelleAutor der Antwort Prabhakaran Rajagopal
Wie wäre es mit einer Registrierung, um den Namen.
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" den Wert ProductName seit Windows XP.
Wenn Sie mit .NET Framework 4.0 oder höher. Sie können entfernen Sie die Is64BitOperatingSystem () - Methode, und verwenden Umwelt.Is64BitOperatingSystem.
InformationsquelleAutor der Antwort Ravi Patel
Ich die
ManagementObjectSearcher
des namespaceSystem.Management
Beispiel:
Ergebnis:
Dokumentation
InformationsquelleAutor der Antwort Rovann Linhalis
Erkennen, OS-Version:
InformationsquelleAutor der Antwort Vince