Comment puis-je détecter les versions du système d'exploitation Windows dans .net?
Quel code puis-je utiliser?
la source
Comment puis-je détecter les versions du système d'exploitation Windows dans .net?
Quel code puis-je utiliser?
System.Environment.OSVersion
contient les informations dont vous avez besoin pour distinguer la plupart des versions majeures du système d'exploitation Windows, mais pas toutes. Il se compose de trois composants qui correspondent aux versions de Windows suivantes:
+------------------------------------------------------------------------------+
| | 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 |
+------------------------------------------------------------------------------+
Pour une bibliothèque qui vous permet d'obtenir une vue plus complète de la version exacte de Windows dans laquelle l'environnement d'exécution actuel s'exécute, consultez cette bibliothèque .
Remarque importante : si votre manifeste d'assembly exécutable n'indique pas explicitement que votre assembly exe est compatible avec Windows 8.1 et Windows 10.0, System.Environment.OSVersion
il renverra la version de Windows 8, qui est 6.2, au lieu de 6.3 et 10.0! Source: ici .
Je l'ai utilisé lorsque je devais déterminer différentes versions du système d'exploitation Microsoft:
Source: ici
la source
vs.Minor != 0
ne doit pas nécessairement êtreXP
ou7
. Il peut s'agir de n'importe laquelle de ces éditions de serveur qui auront les mêmes versions mineures. Voir ici msdn.microsoft.com/en-us/library/windows/desktop/…J'utilise l'
ManagementObjectSearcher
espace de noms deSystem.Management
Exemple:
Résultat:
Documentation
la source
Comme R. Bemrose l'a suggéré, si vous utilisez des fonctionnalités spécifiques à Windows 7, vous devriez consulter le pack de code API Windows® pour Microsoft® .NET Framework .
Il contient une
CoreHelpers
classe qui vous permet de déterminer le système d'exploitation sur lequel vous êtes actuellement (XP et supérieur uniquement, c'est une exigence pour .NET de nos jours)Il fournit également plusieurs méthodes d'assistance. Par exemple, supposons que vous souhaitiez utiliser la liste de raccourcis de Windows 7, il existe une classe
TaskbarManager
qui fournit une propriété appeléeIsPlatformSupported
et elle retournera true si vous êtes sous Windows 7 et supérieur.la source
Vous pouvez utiliser cette classe d'assistance;
Un exemple de code est ici:
J'ai été trouvé à cette adresse: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
la source
Via
Environment.OSVersion
lequel "Obtient un objet System.OperatingSystem contenant l'identifiant de la plate-forme et le numéro de version actuels."la source
Tout cela semble être des réponses très compliquées pour une fonction très simple:
la source
Détecter la version du système d'exploitation:
la source
C'est une question relativement ancienne, mais j'ai récemment dû résoudre ce problème et je n'ai vu ma solution publiée nulle part.
Le moyen le plus simple (et le plus simple à mon avis) est simplement d'utiliser un appel pinvoke à RtlGetVersion
Où les numéros de version majeure et mineure dans cette structure correspondent aux valeurs du tableau de la réponse acceptée.
Cela renvoie le numéro de version de Windows correct contrairement aux fonctions obsolètes GetVersion et GetVersionEx de kernel32
la source
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
La valeur de retour est "Microsoft Windows 10 Entreprise"
la source
Une manière:
Ensuite, enroulez simplement un cas de sélection autour de la fonction.
la source
Que diriez-vous d'utiliser un registre pour obtenir le nom.
"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion" a une valeur ProductName depuis Windows XP.
Si vous utilisez .NET Framework 4.0 ou supérieur. Vous pouvez supprimer la méthode Is64BitOperatingSystem () et utiliser Environment.Is64BitOperatingSystem .
la source
Première solution
Pour vous assurer que vous obtenez la bonne version avec,
Environment.OSVersion
vous devez ajouter unapp.manifest
utilisant Visual Studio et décommenter lessupportedOS
balises suivantes :Ensuite, dans votre code, vous pouvez utiliser
Environment.OSVersion
comme ceci:Exemple
Par exemple, dans ma machine (
Windows 10.0 Build 18362.476
), le résultat serait comme ceci, ce qui est incorrect :En ajoutant
app.manifest
et décommentant ces balises , j'obtiendrai le bon numéro de version:Solution alternative
Si vous n'aimez pas l'ajout
app.manifest
à votre projet, vous pouvez utiliserOSDescription
ce qui est disponible depuis .NET Framework 4.7.1 et .NET Core 1.0.Remarque: n'oubliez pas d'ajouter l'instruction using suivante en haut de votre fichier.
Vous pouvez en savoir plus à ce sujet et sur les plates-formes prises en charge ici .
la source
Les réponses ci-dessus me donneraient une
Major
version6
sur Windows 10.La solution que j'ai trouvée pour fonctionner sans ajouter de bibliothèques VB supplémentaires était la suivante:
Je ne considérerais pas cela comme le meilleur moyen d'obtenir la version, mais l'avantage, c'est une ligne, pas de bibliothèques supplémentaires, et dans mon cas, vérifier si elle contient
"10"
était assez bon.la source
Ne compliquez pas trop le problème.
la source
Major
partie de la version. De plus, il signale "Win7!" sur un système d'exploitation Windows NT / Me / 98/95. Il ne supportera pas non plus bien les futures versions des systèmes d'exploitation