2010-04-28 5 views

Respuesta

45

Utilice el objeto System.OperatingSystem, luego filtre en Major & Número de versión secundaria.

he utilizado estas funciones en el pasado:

static bool IsWinXPOrHigher() 
{ 
    OperatingSystem OS = Environment.OSVersion; 
    return (OS.Platform == PlatformID.Win32NT) && ((OS.Version.Major > 5) || ((OS.Version.Major == 5) && (OS.Version.Minor >= 1))); 
} 

static bool IsWinVistaOrHigher() 
{ 
    OperatingSystem OS = Environment.OSVersion; 
    return (OS.Platform == PlatformID.Win32NT) && (OS.Version.Major >= 6); 
} 
+0

¿PlatformID aún es Win32NT si el sistema operativo es de 64 bits? – AngryHacker

+2

@AngryHacker PlatformID.Win32 = "El sistema operativo es Windows NT o posterior.", Entonces sí. – ParmesanCodice

+1

Cambié el código de IsWinXp para comprobar si es Windows XP o superior. Lo mismo con Vista. – AngryHacker

9

Compruebe que la propiedad Major es mayor o igual que 5, y si es 5 entonces Minor es al menos 1. (XP fue 5.1, 2003 fue 5.2, Vista/2008 fue 6.0).

List of Windows Version Numbers on MSDN.

+2

... y Windows 7 es 6.1 – Esko

+3

Tenga en cuenta que WinXP 32-bit es la versión 5.1; WinXP de 64 bits es la versión 5.2. –

+0

Y esta es exactamente la razón por la que debe buscar lo que necesita en lugar de verificar el número de versión y por qué Win7 es la versión 6.1 y no la 7.0. Verificando el número de versión es fácil equivocarse, y no siempre te dice lo que querías saber. – Stewart

5

No debe marcar el número de versión. En su lugar, debe verificar la funcionalidad que necesita. Si se trata de una API específica, busca, por ejemplo, LoadLibrary y GetProcAddress, de esa manera, no dependes del número de versión.

+0

Dado que una dependencia es la razón por la que necesita la versión, esa es una muy buena idea. – daramarak

+0

¿Cómo comprobar si el sistema operativo admite RegFree COM? – AngryHacker

+0

Intenta cargar un componente desde tu manifiesto. Si no funciona, la plataforma no es compatible con COM – Stewart

Cuestiones relacionadas