2010-12-10 11 views

Respuesta

6

par de maneras de hacer esto:

  1. Se podría analizar el campo de la clase Win32_OperatingSystem en WMI caption.
  2. Puede mirar los campos OSProductSuite y OperatingSystemSKU en la clase Win32_OperatingSystem en WMI.
  3. Puede hacer el puerto this C++ program usando P/Invoke.
+1

Las llamadas WMI tardan 50 ms o más. Su código C++ ni siquiera da el nombre de la edición. Si quieres algo rápido y detallado, solo busca en el registro. HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductName – Sophit

+0

@Sophit: 1. re: 50ms: no en mi experiencia, al menos en la máquina local. 2. ¿Con qué frecuencia está registrando el título del sistema operativo que el rendimiento en esta área importa de todos modos? 3. El registro no es una API y esa clave no es contractual. –

8

This blog post entra en detalles acerca de cómo obtener la versión "mayor" de Windows (XP/Vista/7/etc.), Y es seguido por this blog post que detalla cómo utilizar WMI para obtener esa información adicional.

El código en el segundo enlace es un poco largo, y nunca estoy seguro de copiar grandes cantidades de código de sitios externos sin una licencia obvia, así que no estoy poniendo el código en esta respuesta.

+1

Creo que está bien agregar el código, * si es pequeño o una pequeña porción de código *, siempre y cuando mantenga intacto el enlace 'fuente'. Además, el código ayudaría en caso de que la fuente se convierta en un '0xdeadbeef' (0: –

+0

) Como autor de esas publicaciones de blog, tiene mi permiso para copiar el código. Pronto agregaré una licencia a mi sitio web para evitar esto. problema en el futuro. Gracias por considerar la licencia/permiso. –

2

Tipo de. Use this class en this way.

+0

Tenga en cuenta que este es un puerto C# del enlace en la tercera sección de mi respuesta. +1 –

+0

@Billy: +1 Seguro que lo es. Uno pensaría que el BCL incluya una clase así y facilítelo de hecho. –

4

Si hace referencia a los Microsoft.VisualBasic.Devices espacio de nombres se puede hacer esto:

ComputerInfo computerInfo = new ComputerInfo(); 
string fullName = computerInfo.OSFullName; // i.e. "Microsoft Windows 7 Ultimate" 

Puede utilizar Microsoft.VisualBasic en su C# aplicaciones - Es igual que cualquier otra biblioteca.

+0

Cuando se utiliza desde VB.NET, es simplemente 'My.Computer.Info.OSFullName'. Tenga en cuenta que el resultado es localizado, por lo que no es bueno para el análisis. A diferencia de esto, el [valor de registro ] (http://stackoverflow.com/questions/4405761/get-windows-edition#comment61415777_4405791) no está localizado – GSerg

0

¿Una respuesta simple? Solo mira en el registro.

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductName

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ CSDVersion

No tiene la sobrecarga de WMI (50 ms cada llamada) , y le da el nombre completo.

+0

Para algo que solo necesita hacer una vez y almacenarlo en caché (el sistema operativo no puede cambiar versiones sin reiniciar primero), 50ms no es gran cosa. –

Cuestiones relacionadas