¿Cómo puedo detectar las versiones del sistema operativo Windows en .net?
¿Qué código puedo usar?
fuente
¿Cómo puedo detectar las versiones del sistema operativo Windows en .net?
¿Qué código puedo usar?
System.Environment.OSVersion
tiene la información que necesita para distinguir la mayoría de las versiones principales del sistema operativo Windows, pero no todas. Consta de tres componentes que se asignan a las siguientes versiones de Windows:
+------------------------------------------------------------------------------+
| | 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 |
+------------------------------------------------------------------------------+
Para obtener una biblioteca que le permita obtener una vista más completa de la versión exacta de Windows en la que se ejecuta el entorno de ejecución actual, consulte esta biblioteca .
Nota importante : si su manifiesto de ensamblaje ejecutable no indica explícitamente que su ensamblaje exe es compatible con Windows 8.1 y Windows 10.0, System.Environment.OSVersion
devolverá la versión de Windows 8, que es 6.2, en lugar de 6.3 y 10.0. Fuente: aquí .
Usé esto cuando tuve que determinar varias versiones del sistema operativo Microsoft:
Fuente: aquí
fuente
vs.Minor != 0
no necesariamente tiene que serXP
o7
. Podría ser cualquiera de esas ediciones de servidor que tendrán las mismas versiones menores. Ver aquí msdn.microsoft.com/en-us/library/windows/desktop/…Yo uso el
ManagementObjectSearcher
espacio de nombresSystem.Management
Ejemplo:
Resultado:
Documentación
fuente
Como sugirió R. Bemrose, si está haciendo funciones específicas de Windows 7, debe consultar el paquete de códigos API de Windows® para Microsoft® .NET Framework .
Contiene un
CoreHelpers
clase que le permite determinar el sistema operativo en el que se encuentra actualmente (solo XP y superior, es un requisito para .NET hoy)También proporciona múltiples métodos auxiliares. Por ejemplo, suponga que desea usar la lista de salto de Windows 7, hay una clase
TaskbarManager
que proporciona una propiedad llamadaIsPlatformSupported
y devolverá verdadero si está en Windows 7 y superior.fuente
Puedes usar esta clase auxiliar;
El código de muestra está aquí:
Me encontraron en esta dirección: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
fuente
A través de la
Environment.OSVersion
cual "Obtiene un objeto System.OperatingSystem que contiene el identificador de plataforma actual y el número de versión".fuente
Todas estas parecen respuestas muy complicadas para una función muy simple:
fuente
Detectar versión del sistema operativo:
fuente
Esta es una pregunta relativamente antigua, pero recientemente tuve que resolver este problema y no vi mi solución publicada en ningún lado.
La forma más fácil (y más simple en mi opinión) es usar una llamada pinvoke a RtlGetVersion
Donde los números de versión Mayor y Menor en esta estructura corresponden a los valores en la tabla de la respuesta aceptada.
Esto devuelve el número de versión de Windows correcto a diferencia de las funciones obsoletas GetVersion y GetVersionEx del kernel32
fuente
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
El valor de retorno es "Microsoft Windows 10 Enterprise"
fuente
De una sola mano:
Luego simplemente envuelva un caso de selección alrededor de la función.
fuente
¿Qué tal usar un Registro para obtener el nombre?
"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion" tiene un valor ProductName desde Windows XP.
Si está utilizando .NET Framework 4.0 o superior. Puede eliminar el método Is64BitOperatingSystem () y usar Environment.Is64BitOperatingSystem .
fuente
Primera solución
Para asegurarse de obtener la versión correcta
Environment.OSVersion
, debe agregar unapp.manifest
uso de Visual Studio y descomentar las siguientessupportedOS
etiquetas:Luego, en su código, puede usar
Environment.OSVersion
así:Ejemplo
Por ejemplo, en mi máquina (
Windows 10.0 Build 18362.476
) el resultado sería así, lo cual es incorrecto :Al agregar
app.manifest
y descomentar esas etiquetas obtendré el número de versión correcto:Solución alternativa
Si no le gusta agregar
app.manifest
a su proyecto, puede usar elOSDescription
que está disponible desde .NET Framework 4.7.1 y .NET Core 1.0.Nota: No olvide agregar la siguiente instrucción de uso en la parte superior de su archivo.
Puede leer más sobre esto y las plataformas compatibles aquí .
fuente
Las respuestas anteriores me darían la
Major
versión6
en Windows 10.La solución que he encontrado que funciona sin agregar bibliotecas VB adicionales fue la siguiente:
No consideraría que esta sea la mejor manera de obtener la versión, pero lo bueno es que no tiene bibliotecas adicionales y, en mi caso, verificar si contiene
"10"
es lo suficientemente bueno.fuente
No compliques demasiado el problema.
fuente
Major
parte de la versión. Además, informa "Win7!" en un sistema operativo Windows NT / Me / 98/95. Tampoco se adaptará bien a las futuras versiones de los sistemas operativos