2009-02-13 6 views
29

Comment traduire les numéros de version MS Windows OS en noms de produits?Comment traduire les numéros de version MS Windows OS en noms de produits dans .NET?

Par exemple, dans .NET les deux propriétés suivantes pourraient être utilisées pour travailler que le produit est MS Windows Vista Ultimate Edition:

Environment.OSVersion.Platform returns Win32NT

Environment.OSVersion.Version returns 6.0.6001.65536

+0

Liste complète des versions (et noms de produits respectifs) est disponible [ici] (http://msdn.microsoft.com/library/windows/desktop/ ms724832.aspx) sur MSDN –

+0

Vous n'avez probablement pas besoin de le traduire. Si vous avez besoin d'un nom de version de système d'exploitation lisible comme "Microsoft Windows 7 Professionnel", utilisez la propriété OSFullName de ComputerInfo. Ajoutez une référence à Microsoft.VisualBasic et à l'aide de Microsoft.VisualBasic.Devices. Ne soyez pas confus par 'VisualBasic'. Cela fonctionne dans toutes les langues .Net. BTW ComputerInfo a d'autres propriétés utiles comme la taille de la mémoire physique/virtuelle. – Den

Répondre

46

howto net os version

VB :

Public Function GetOSVersion() As String 
    Select Case Environment.OSVersion.Platform 
     Case PlatformID.Win32S 
      Return "Win 3.1" 
     Case PlatformID.Win32Windows 
      Select Case Environment.OSVersion.Version.Minor 
       Case 0 
        Return "Win95" 
       Case 10 
        Return "Win98" 
       Case 90 
        Return "WinME" 
       Case Else 
        Return "Unknown" 
      End Select 
     Case PlatformID.Win32NT 
      Select Case Environment.OSVersion.Version.Major 
       Case 3 
        Return "NT 3.51" 
       Case 4 
        Return "NT 4.0" 
       Case 5 
        Select Case _ 
         Environment.OSVersion.Version.Minor 
         Case 0 
          Return "Win2000" 
         Case 1 
          Return "WinXP" 
         Case 2 
          Return "Win2003" 
        End Select 
       Case 6 
        Select Case _ 
         Environment.OSVersion.Version.Minor 
         Case 0 
          Return "Vista/Win2008Server" 
         Case 1 
          Return "Win7/Win2008Server R2" 
         Case 2 
          Return "Win8/Win2012Server" 
         Case 3 
          Return "Win8.1/Win2012Server R2" 
        End Select 
       Case 10 //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used 
        Return "Windows 10" 
       Case Else 
        Return "Unknown" 
      End Select 
     Case PlatformID.WinCE 
      Return "Win CE" 
    End Select 
End Function 

C#

public string GetOSVersion() 
{ 
    switch (Environment.OSVersion.Platform) { 
    case PlatformID.Win32S: 
     return "Win 3.1"; 
    case PlatformID.Win32Windows: 
     switch (Environment.OSVersion.Version.Minor) { 
     case 0: 
      return "Win95"; 
     case 10: 
      return "Win98"; 
     case 90: 
      return "WinME"; 
     } 
     break; 

    case PlatformID.Win32NT: 
     switch (Environment.OSVersion.Version.Major) { 
     case 3: 
      return "NT 3.51"; 
     case 4: 
      return "NT 4.0"; 
     case 5: 
      switch (Environment.OSVersion.Version.Minor) { 
      case 0: 
       return "Win2000"; 
      case 1: 
       return "WinXP"; 
      case 2: 
       return "Win2003"; 
      } 
      break; 

     case 6: 
      switch(Environment.OSVersion.Version.Minor) { 
      case 0: 
       return "Vista/Win2008Server"; 
      case 1: 
       return "Win7/Win2008Server R2"; 
      case 2: 
       return "Win8/Win2012Server"; 
      case 3: 
       return "Win8.1/Win2012Server R2"; 
      } 
      break; 
     case 10: //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used 
      return "Windows 10"; 
     } 
     break; 

    case PlatformID.WinCE: 
     return "Win CE"; 
    } 

    return "Unknown"; 
} 
+0

Pourquoi pas des instructions de cas pour VB et C#? Ajouter également une déclaration supplémentaire pour Windows 7. – Keith

+0

comment détecter Vista, Win2008, Win7 ??? – Kiquenet

+5

Les numéros de version (majeur et mineur) pour XP x64 et 2003 sont identiques == 5.2. La même chose s'applique à Vista et 2008 == 6.0 et à 2008 R2 et Win7 == 6.1. Si vous devez différencier ces systèmes, vous pouvez vérifier la propriété OSVersionInfo.OSProductType par rapport à OSProductType.Workstation. (De http://www.codeproject.com/KB/system/osversion.aspx) – habakuk

4

Il y a un C++ exemple à msdn http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx, ainsi qu'une personne note est ajoutée sur la façon de l'envelopper pour une utilisation dans .net [VB]. Il semble que le bit "manquant" dont vous avez besoin est la fonction Win32 GetProductInfo (PInvoke.net reference for this).

Entre ceci et la réponse d'Avram, vous devriez être capable d'assembler la chaîne de version complète.

+0

@Rob : J'ai basé ma réponse sur la balise ".net" qui a ajouté à la question – Avram

+0

Avram - Yeup, vous l'avez fait - mais, P/Invoke fait partie de .net, et est (autant que je sache!) la seule façon de ajouter à votre réponse pour obtenir la "édition" partie, à savoir "Ultimate Edition" ou "Home Premium", etc. – Rob

+0

échoue pour moi dans Win2003: Impossible de trouver un point d'entrée nommé 'GetProductInfo' dans DLL 'kernel32. dll '. – Kiquenet

12

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

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

Si vous voulez juste un GUI message d'information convivial je

Mon. Computer.Info.OSFullName & "(" + My.Computer.Info.OSVersion + ")"

semble être la preuve d'avenir pour les futures versions de Windows

+2

S'il vous plaît ajouter quelques informations supplémentaires. Quelle est exactement la référence 'My.Computer.Info.OSFullName'? Est-ce .NET, une clé de registre ou une structure?!? –

+0

https://msdn.microsoft.com/en-us/library/bfx6bse3(v=vs.90).aspx?f=255&MSPPError=-2147217396 –

3

Ceci est ma solution, le plus rapide et sans cas sélectionnés.

le résultat peut être personnalisé que vous voulez

public static string SistemaOperativo 
    { 
     get 
     { 
      #region Dichiarazioni 
      var osInfo = Environment.OSVersion; 
      int platformID = (int)osInfo.Platform; 
      int versionM = osInfo.Version.Major; 
      int versionm = osInfo.Version.Minor; 
      string servicePack = osInfo.ServicePack; 
      #endregion 

      #region Spiegazione logica 
      /* 
      * IT: 
      * La chiave del dizionario è il risultato del concatenamento di 
      * PlatformID,MajorVersion,MinorVersion, tutto convertito in Int32, 
      * per esempio Platform ID=1 MajorVersion=4 MinorVersion=0, 
      * il risultato è 140 ossia Windows 95 
      * 
      * EN: 
      * The key in Dictionary is the 'join' 
      * of PlatformID,MajorVersion,MinorVersion, in int32, 
      * eg. Platform ID=1 MajorVersion=4 MinorVersion=0, 
      * the result is '140' (Windows 95) 
      */ 
      #endregion 
      Dictionary<int, string> sistemiOperativi = new Dictionary<int, string>(){ 
         {0, "Windows 3.1"}, 
         {140, "Windows 95"}, 
         {1410, "Windows 98"}, 
         {1490, "Windows ME"}, 
         {2351, "Windows NT 3.51"}, 
         {240, "Windows 4.0"}, 
         {250, "Windows 2000"}, 
         {251, "Windows XP"}, 
         {252, "Windows 2003"}, 
         {260, "Windows Vista/Server 2008"}, 
         {261, "Windows 7"}, 
         {-1, "Unknown"} 
        }; 
      int idUnivoco = int.Parse(string.Format("{0}{1}{2}", platformID, versionM, versionm)); 
      string outValue = ""; 
      if (sistemiOperativi.TryGetValue(idUnivoco, out outValue)) 
       return string.Format("{0}{1}", outValue, servicePack); 
      return sistemiOperativi[-1]; 
     } 
    } 
+0

Comme la simplicité, et l'explication italienne XD –

+0

Grazie tante! Vous pourriez ajouter une solution de rechange pour être à l'épreuve du futur. – beppe9000

Questions connexes