Páginas

martes, 19 de enero de 2016

Saber el número de bits de nuestra versión de Windows instalada desde VB.Net

Logo de Windows  En ocasiones queremos saber si nuestra versión de Windows instalada es de 32 o 64 bits. Desde VB.Net podemos saberlo muy facilmente, si deseas saber como continua leyendo este tutorial que incluye un código fuente para implementar en nuestro proyecto.
  Recientemente publiqué una función para saber la versión de Windows instalada, pues bien, en esta ocasión vamos a usarla junto a un código fuente que nos permite hacer lo que el título de este post menciona, saber de cuantos bits es nuestro sistema operativo. Si aún no la haz integrado a tu sistema ahora es el momento.

  '#### Purpose: Return operative system bits version
  '#### Created date: 11/01/2016
  '#### Created by username: Juan Manuel Mar Hdz.
  '#### Last modified date: 14/01/2016
  '#### Last modified username: Juan Manuel Mar Hdz.
  '#### Thanks to http://dondueck.com/2010/04/15/detecting-32-bit-vs-64-bit-os-architecture-in-vb-net/
  '#### Thanks to https://es.wikipedia.org/wiki/Windows_95
  Public Function getBitsVersion() As Long
    
    Dim winver As String = ""
      Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
    
      '##### Return bits number to old window's versions or others systems ####
    
      Try
          winver = getVersion().Trim
      Catch exp As Exception
          winver = ""
      End Try
    
      If isOldWindowsSystem = True Or isNotWindowsSystem = True Then
        
          If isNotWindowsSystem = True Then
              Return 32
          Else
            
              If winver.IsNullOrEmpty(winver) = True Then
                  Return 32
              Else
                
                  If winver.Trim().ToLower = "windows 3.1" Then
                      Return 16
                  Else
                      Return 32
                  End If
                
              End If
            
          End If
        
          Exit Function
        
      End If
    
      '##### Return bits number to old window's versions or others systems ####
    
      Try
        
          If key.OpenSubKey("Hardware\Description\System\CentralProcessor").GetValue("Identifier").ToString().ToLower().Contains("x86") Or key.OpenSubKey("Hardware\Description\System\CentralProcessor").GetValue("Identifier").ToString().ToLower().Contains("32") Then
            Return 32
        Else
            Return 64
        End If
    
      Catch exp As Exception
        
          Try
            
              If key.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString().ToLower().Contains("x86") Or key.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString().ToLower().Contains("32") Then
              Return 32
          Else
              Return 64
          End If
            
          Catch ex As Exception
            
              Try
                
                  If key.OpenSubKey("Hardware\Description\System\CentralProcessor\1").GetValue("Identifier").ToString().ToLower().Contains("x86") Or key.OpenSubKey("Hardware\Description\System\CentralProcessor\1").GetValue("Identifier").ToString().ToLower().Contains("32") Then
                Return 32
            Else
                Return 64
            End If
            
              Catch e As Exception
                  Return 32
              End Try
            
          End Try
        
      End Try
    
  End Function
 
    La función "getVersion" solo tiene la finalidad de regresar la versión de Windows, esto no está probado en las versiones antiguas (Windows 3.11 y Windows 9.x, aunque a estas alturas dudo que alguien lo use, además de que yo sepa no existe el framework .Net para este sistema), de esa manera si se trata de una versión antigua se retorna 16 o 32 bits directamente, si por el contrario ya se trata de una versión más actual de Windows se usará entonces el registro para determinar correctamente su número en bits.

  Pero en caso contrario usamos el registro para saber de cuantos bits es nuestro procesador, como pueden en el registro del sistema hay dos variantes posibles (llaves): Hardware\Description\System\CentralProcessor y Hardware\Description\System\CentralProcessor\0, con este dato obtenido podemos saber facilmente el número de bits de nuestro sistema. Espero les sea de utilidad.

Procedencia de las imágenes:
File: Logos de Windows
URL: http://mlm-s2-p.mlstatic.com/sistemas-operativos-software-juegos-pc-339801-MLM20437678808_102015-S.jpg
Licencia: Creative Commons

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

2 comentarios:

  1. Hay una forma algo más sencilla de implementarlo en .NET, que es usar https://Environment.is64bitoperatingsystem, disponible en .NET 4.

    Sobre los chequeos de 16 bit, no tienen sentido, ya que no hay runtimes de .NET compatibles Win16, de modo que nunca se dará el caso de ese programa ejecutándose en un Windows 3.

    ResponderBorrar
    Respuestas
    1. Gracias por tu comentario, aunque no trabajo en .net 4 por la cuestión de que muchas pcs con xp (mis clientes) o no lo tienen instalado o tienen xp que viene con el 3.5, de hecho me topado con una maquina donde no es posible instalar el nuevo .net aun con permisos de administrador :( . Te agradezco de cualquier modo tu aporte. Con respecto a los 16 bits tienes razón, pero lo dejé por cuestiones de control de versiones del sistema.

      Borrar