Comment détecter le système d’exploitation Windows 8 en utilisant C # 4.0?

Je dois détecter le système d’exploitation Windows 8 dans mon application Windows C # et effectuer certains réglages. Je sais que nous pouvons détecter Windows 7 en utilisant Environment.OSVersion , mais comment Windows 8 peut-il être détecté?

Merci d’avance.

 Version win8version = new Version(6, 2, 9200, 0); if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= win8version) { // its win8 or higher. } 

Mise à jour pour Windows 8.1 et supérieur:

Ok, les gars, il me semble que ce morceau de code a été marqué comme déconseillé par Microsoft lui-même. Je laisse un lien ici pour en savoir plus.

En bref, il dit:

Pour Windows 8 et supérieur, il y aura toujours le même numéro de version de (6, 2, 9200, 0) . Et plutôt que de rechercher la version de Windows, recherchez la fonctionnalité réelle que vous essayez de résoudre.

Windows 8 ou plus récent:

 bool IsWindows8OrNewer() { var os = Environment.OSVersion; return os.Platform == PlatformID.Win32NT && (os.Version.Major > 6 || (os.Version.Major == 6 && os.Version.Minor >= 2)); } 

Vérifiez la réponse à la question suivante: Comment obtenir le nom de version du système d’exploitation “convivial”?

Citation réponse:

Vous pouvez utiliser WMI pour obtenir le nom du produit (“Microsoft® Windows Server® 2008 Enterprise”):

 using System.Management; var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType() select x.GetPropertyValue("Caption")).First(); return name != null ? name.ToSsortingng() : "Unknown"; 

Commencez par déclarer une structure comme suit:

 [StructLayout(LayoutKind.Sequential)] public struct OsVersionInfoEx { public int dwOSVersionInfoSize; public uint dwMajorVersion; public uint dwMinorVersion; public uint dwBuildNumber; public uint dwPlatformId; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public ssortingng szCSDVersion; public UInt16 wServicePackMajor; public UInt16 wServicePackMinor; public UInt16 wSuiteMask; public byte wProductType; public byte wReserved; } 

Vous aurez besoin de cette instruction:

  using System.Runtime.InteropServices; 

En haut de votre classe, déclarez:

  [DllImport("kernel32", EntryPoint = "GetVersionEx")] static extern bool GetVersionEx(ref OsVersionInfoEx osVersionInfoEx); 

Appelez maintenant le code comme suit:

  const int VER_NT_WORKSTATION = 1; var osInfoEx = new OsVersionInfoEx(); osInfoEx.dwOSVersionInfoSize = Marshal.SizeOf(osInfoEx); try { if (!GetVersionEx(ref osInfoEx)) { throw(new Exception("Could not determine OS Version")); } if (osInfoEx.dwMajorVersion == 6 && osInfoEx.dwMinorVersion == 2 && osInfoEx.wProductType == VER_NT_WORKSTATION) MessageBox.Show("You've Got windows 8"); } catch (Exception) { throw; } 

Je ne sais pas si c’est correct car je ne peux que vérifier la version de Windows 8 que j’ai.

  int major = Environment.OSVersion.Version.Major; int minor = Environment.OSVersion.Version.Minor; if ((major >= 6) && (minor >= 2)) { //do work here }