¿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.OSVersiontiene 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.OSVersiondevolverá 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 != 0no necesariamente tiene que serXPo7. 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
ManagementObjectSearcherespacio de nombresSystem.ManagementEjemplo:
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
CoreHelpersclase 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
TaskbarManagerque proporciona una propiedad llamadaIsPlatformSupportedy 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.OSVersioncual "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().OSFullNameEl 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.manifestuso de Visual Studio y descomentar las siguientessupportedOSetiquetas:Luego, en su código, puede usar
Environment.OSVersionasí: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.manifesty descomentar esas etiquetas obtendré el número de versión correcto:Solución alternativa
Si no le gusta agregar
app.manifesta su proyecto, puede usar elOSDescriptionque 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
Majorversión6en 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
Majorparte 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