Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.5K
Views
Detectar Windows 11 con .NET Framework o API de Windows

En .NET Framework, para obtener la versión del sistema operativo, puede usar Environment.OSVersion con los valores Major y Minor que le indican la versión de Windows (es decir, 6.1 = Windows 7, 10.0 = Windows 10). Aunque Windows 11 se ha lanzado (canales de desarrollo y beta) durante más de un mes, la documentación no se ha actualizado para mencionar cómo detectar Windows 11.

Para la API de Windows, GetVersion ha quedado obsoleto para siempre e incluso las API auxiliares de la versión solo suben a IsWindows10OrGreater . ¿Existe una verificación simple para averiguar la versión principal de Windows, en particular, Windows 11? Alguien tenía una pregunta similar pero para Delphi (Cómo detectar Windows 11 usando Delphi 10.3.3 ) y la respuesta aceptada fue todos los hacks. ¿Por qué diablos es tan difícil para Microsoft proporcionar una API simple para devolver la versión actual del sistema? GetVersion nunca debería haber quedado obsoleto.

over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

Lo más probable es que esto no sea perfecto, pero es una solución que he estado usando durante un tiempo:

 Environment.OSVersion.Version.Build >= 22000;

Windows 11 comienza en el número de compilación 22000 y Windows 10 termina aproximadamente en el número de compilación 21390, por lo que esto solo detectará las compilaciones de Windows 11 que yo sepa.

Sin embargo, compruebe si es un sistema Windows en primer lugar, otro sistema operativo podría tener un número de compilación más alto.

over 4 years ago · Santiago Trujillo Report

0

Puede usar RtlGetVersion() GetVersion/Ex() supportedOS ntdll.dll

over 4 years ago · Santiago Trujillo Report

0

RtlGetVersion() dio los mismos resultados para Windows 10 y 11 que para mí. Lo llamé desde el código C# como se describe aquí https://stackoverflow.com/a/49641055 . Probé la propiedad Caption de la clase Win32_OperatingSystem de WMI.

 using (var objOS = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")) { foreach (ManagementObject objMgmt in objOS.Get()) { Console.WriteLine("{0}: {1}", objMgmt.Properties["Caption"].Name, objMgmt.Properties["Caption"].Value); } }

Para Windows 10 obtuve "Microsoft Windows 10 Enterprise" y para Windows 11 "Microsoft Windows 11 Pro". Probablemente podría usar la propiedad Nombre, pero contiene demasiada información, como la carpeta de Windows y la unidad del sistema, o algo así.

over 4 years ago · Santiago Trujillo Report

0

Usa este código:

 public static bool IsWindows11() { var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); var currentBuildStr = (string)reg.GetValue("CurrentBuild"); var currentBuild = int.Parse(currentBuildStr); return currentBuild >= 22000; }

Esto se basa en mis hallazgos en HKLM\Software\Microsoft\Windows NT\CurrentVersion: ¿Cuál es la diferencia entre CurrentBuild y CurrentBuildNumber?

Y tenga en cuenta que este código puede generar excepciones en caso de que la clave de registro no exista o en caso de que el valor no sea un número. Esto no debería ocurrir en un sistema normal. Pero si quiere estar seguro, puede deformarlo en un bloque de intento y captura.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!