C # Determine le système d’exploitation sous Windows 7 ou Windows Windows Server 2008

J’utilise la version .NET Framework 3.5 et le programme doit détecter toutes les versions de Windows (y compris Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012).

Le problème est comment puis-je déterminer le système d’exploitation dans les situations ci-dessous?

  • Le numéro de version de Windows Vista et Windows Server 2008 est 6.0.
  • Le numéro de version de Windows 7 et Windows Server 2008 R2 est 6.1.
  • Le numéro de version de Windows 8 et Windows Server 2012 est 6.2.

J’ai trouvé le code ci-dessous mais je ne peux pas l’utiliser car j’utilise .NET Framework 3.5.

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

Comment puis-je résoudre ce problème?

Je suppose que le problème avec ce code est qu’il utilise LINQ. Vous pouvez toujours utiliser WMI pour le vérifier, mais n’utilisez pas LINQ. Je pense également qu’il est préférable de vérifier le ProductType plutôt que la Caption .

 using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")) { foreach (ManagementObject managementObject in searcher.Get()) { uint productType = (uint)managementObject.GetPropertyValue("ProductType"); // productType will be 1 for workstation, 2 for domain controller, // 3 for normal server } } 

Ensuite, il suffit de vérifier le numéro de version pour déterminer la version réelle du système d’exploitation.

Une autre méthode consiste à utiliser la base de registres et à vérifier la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductType . Cela aura les valeurs WinNT, ServerNT ou LanmanNT pour marquer les mêmes options que le code WMI.

Vous pouvez directement obtenir des informations à partir du fichier de registre . Cela fonctionne parfaitement à partir de .net 3.0 et supérieur.

 Ssortingng loc= @"SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion"; RegistryKey key = Registry.LocalMachine; RegistryKey skey = key.OpenSubKey(loc); Console.WriteLine("OS Name: {0}", skey.GetValue("ProductName"));