Pregunta

Quiero aprovechar la nueva funcionalidad de la barra de tareas de Windows 7 en una aplicación .NET y me gustaría saber cuál es la mejor manera de verificar las características de Windows 7 en .NET. Mi objetivo es tener un código distinto para Windows XP y Windows 7.

No estoy demasiado interesado en:

  • simplemente envolviendo el código de Windows 7 en un intento de captura
  • si OS = " Windows 7 " Entonces...

A menos que, por supuesto, esto sea lo que la mayoría está haciendo. Realmente he cazado en todas partes por un buen enfoque, pero sin éxito. La biblioteca de envoltorio de código no administrado de Microsoft parece asumir que se está ejecutando en Windows 7 ...

¿Fue útil?

Solución

Creo que no hay nada de malo en if OS = " Windows 7 " ;. Por supuesto,

  • debería ser si OS > = " Windows 7 " (para que no se rompa en Windows 7.1 o lo que sea el sucesor) y
  • debe hacerse marcando Environment.OSVersion (Plataforma y > = Versión).

Si no desea saturar su código con if (isWindows7) {...} , es posible que desee colocar el código específico de la plataforma en una clase separada. Por ejemplo, podría crear una interfaz

interface IOSSpecific {
    void AddToJumpList(...);
    ...
}

y dos implementaciones de esta clase, una para > = Win 7 y otra para otras (que hace cosas diferentes o nada). Cuando se inicia su aplicación, crea una instancia de alguna variable global de tipo IOSSpecific con cualquiera de las dos implementaciones.

Otros consejos

Espero que lo hagas:

if ( Environment.OSVersion.Platform == windows7Id)
{
    // win7 stuff
}

Sin embargo, no sé qué valor tiene la identificación de Windows7.

Normalmente hago esta pregunta para decidir qué objeto creo desde mis fábricas para admitir diferentes plataformas. Más agradable que esparcirlos por toda la base del código o detectar excepciones.

Si usa una biblioteca de contenedor como Code Pack ( http://code.msdn.microsoft.com / WindowsAPICodePack ) realiza la comprobación de la versión por ti. Siga adelante y llame a los métodos de la biblioteca y arrojará una excepción PlatformNotSupportedException si intenta algo que no está en el sistema operativo cuando se está ejecutando.

También puede atrapar EntryPointNotFoundException si está P / Invocando en alguna DLL de Windows. Este es el mejor enfoque al hacer su propia interoperabilidad, ya que la funcionalidad puede agregarse (por actualizaciones y paquetes de servicio) años a partir de ahora en el sistema operativo de nivel inferior.

Con ambos, puede almacenar en caché algún tipo de indicador que le recuerde que no hay una barra de tareas o que no hay bibliotecas o que no tiene las características, para evitar el impacto de lanzar y detectar la excepción.

Si insiste en verificar su propia versión y ver en qué sistema operativo se encuentra, por favor recuerde la magia de > =. Usted sabe cuánto código hay que prueba que la versión es exactamente XP SP2 y luego muestra un cuadro de mensaje que dice "¿Requiere XP SP2 o posterior"? Una tonelada . De hecho, esa es la razón por la cual la versión principal para Win7 es la 6, de modo que todo el código que verifica '' es igual a 6 '' aún funcionaría No seas ese tipo.

if (Environment.OSVersion.Version.Major >= 6)
{
   if (Environment.OSVersion.Version.Minor >= 1)
     // Do Win7 thing
   else
     // Do Vista thing
}
else if (Environment.OSVersion.Version.Major >= 5)
 // Do XP thing

Puede encontrar todos los números mayores / menores en http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

Kate

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top