Menubar

miércoles, 10 de febrero de 2016

Corrección para la función "Saber la versión de Windows instalada desde VB.Net"

Por J. Manuel Mar H. Editar
Compartir en Facebook
Compartir en Twitter
Compartir en MeWe
Enviar a Reddit
Guardar en Internet archive
Guardar en  archive.today
Enviar por email
Parche  Algunas semanas atrás publiqué el código fuente de una función en VB.Net para obtener la versión de Windows instalada, pues bien, aunque el código fuente trabajaba bien, no lo hacía con Windows 10. Este era detectado como Windows 8, sin embargo gracias a una persona que sigue este blog y reportó el problema, el mismo ya ha sido corregido y a continuación lo publico para beneficio de todos, no sin antes darle las gracias.

  Una de las grandes ventajas del mundo Open Source es, no solo beneficiarnos del trabajo de alguien más (legalmente), sinó de aprender de otros y si en nuestras manos está, poder ayudar a alguien más. Creo que eso es algo estupendo y en lo personal un servidor ha podido comprobarlo con sus propios ojos; como mencionaba al principio el código fuente original al parecer trabajaba bien, pero con la última versión del sistema operativo Windows (10) no funcionaba correctamente.

Publicidad


  Pues bien, Javier Gutierrez Chamorro (Guti) se dio a la tarea de hacerme la observación de que dicho código fuente no trabajaría en Windows 10, me hizo una sugerencia para mejorarlo. Lamentablemente no pude implementarla en VB.Net, pero ya confirmando que efectivamente el código no trabajaba en la última versión de Windows busque otra alternativa y la comparto, esperando les sea de utilidad.

La solución consiste en analizar el registro de Windows. Este sistema operativo guarda el nombre (al igual que la versión de bits del mismo) en dicha base de datos, lo único que hay que hacer entonces es saber donde buscar y recuperar esos datos y listo, si todo sale bien obtendremos el nombre del sistema operativo, de lo contrario o en caso de error recurrimos a la versión anterior de dicho código fuente. Dejo algunas capturas de pantalla para mostrar que ahora si funciona correctamente guiño.






Procedencia de las imágenes:
File: Parche (clipart)
URL: http://images.all-free-download.com/images/graphiclarge/two_patch_icon_clip_art_9626.jpg
Licencia: Creative Commons

Código fuente corregido:

'#### Purpose: Return windows version
  '#### Created date: 27/10/2012
  '#### Created by username: Juan Manuel Mar Hdz.
  '#### Last modified date: 21/01/2016
  '#### Thanks to Javier Gutierrez Chamorro (GUTI) http://www.javiergutierrezchamorro.com/
  '#### Detection of bug thanks to GUTI http://marjuanm.blogspot.mx/2016/01/saber-la-version-de-windows-instalada.html?showComment=1453388084860#c6644367260581658729
  '#### Thanks to https://social.technet.microsoft.com/Forums/en-US/fab32208-ac7f-4e7a-9295-ce963967bc25/how-do-i-convert-windows-10-pro-technical-preview-to-windows-10-enterprise-technical-preview-and?forum=WinPreview2014General
  Public Function getVersion() As String
 
  Dim winver As String = ""
  Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
 
  Try
 
  winver = key.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue("ProductName").ToString().Trim
 
  If winver.IsNullOrEmpty(winver) = False Then
  Return winver.Trim
  Else
  Return getVersionByClassicalMethod().Trim
  End If
 
  Catch exp As Exception
 
  Try
  Return getVersionByClassicalMethod().Trim
  Catch ex As Exception
  Return "Unknown"
  End Try
 
  End Try
 
  End Function

  '#### Purpose: Return windows version
  '#### Created date: 21/01/2016
  '#### Created by username: Juan Manuel Mar Hdz.
  '#### Last modified date: 21/01/2016
  '#### Last modified username: Juan Manuel Mar Hdz.
  '#### Thanks to http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5956c04f-072a-406c-ae6a-cc8b3a207936
  '#### Thanks to https://en.wikipedia.org/wiki/Windows_NT
  '#### Thanks to https://msdn.microsoft.com/en-gb/library/windows/desktop/ms724833%28v=vs.85%29.aspx
  Private Function getVersionByClassicalMethod() As String
 
  Dim strVersion As String = "Unknown"
 
    Select Case Environment.OSVersion.Platform
   
     Case PlatformID.Win32S
            strVersion = "Windows 3.1"
         
        Case PlatformID.Win32Windows
         
            Select Case Environment.OSVersion.Version.Minor
           
            Case 0I
                  strVersion = "Windows 95"
               
            Case 10I
           
             If Environment.OSVersion.Version.Revision.ToString() = "2222A" Then
                    strVersion = "Windows 98 Second Edition"
                  Else
                    strVersion = "Windows 98"
                  End If
               
              Case 90I
                  strVersion = "Windows ME"
               
            End Select
             
        Case PlatformID.Win32NT
       
         Select Case Environment.OSVersion.Version.Major
         
           Case 3I
                    strVersion = "Windows NT 3.51"
                Case 4I
                    strVersion = "Windows NT 4.0"
                 
                Case 5I
               
                 Select Case Environment.OSVersion.Version.Minor
                 
                    Case 0I
                            strVersion = "Windows 2000"
                         
                    Case 1I
                     strVersion = "Windows XP"
                   
                    Case 2I
                            strVersion = "Windows XP/Windows 2003/Windows Server 2003 R2/Windows Home Server"
                             
                     End Select
                     
                Case 6I
               
                 Select Case Environment.OSVersion.Version.Minor
                         
                         Case 0I
                             strVersion = "Windows Vista/Windows Server 2008"
                           
                         Case 1I
                            strVersion = "Windows 7/Windows Server 2008 R2/Windows Server 2011"
                         
                         Case 2I
                            strVersion = "Windows 8/Windows Server 2012"
                         
                         Case 3I
                            strVersion = "Windows 8.1/Windows Server 2012 R2"
                         
                         Case 4I
                            strVersion = "Windows 8.1/Windows Server 2012 R2"
                         
                    End Select
                 
                 
                Case 10I
               
                 Select Case Environment.OSVersion.Version.Minor
                         
                         Case 0I
                             strVersion = "Windows 10"
                           
                    End Select
                 
             End Select
             
          Case PlatformID.WinCE
              strVersion = "Windows CE"
           
          Case PlatformID.Unix
              strVersion = "Unix"
             
    End Select
 
    Return strVersion
     
  End Function

¿Te gustó este post?, entonces si lo deseas puedes apoyarnos para continuar con nuestra labor, gracias.



Licencia de Creative Commons Esta obra está bajo una licencia de Creative Commons Reconocimiento 4.0 Internacional, haga clic aquí para conocer más detalles.


Compartir:



Directorio de blogs, ¡agrega el tuyo!
Programas para el mantenimiento de Windows
Blog de seguridad informatica