2010-04-28 9 views

risposta

45

Utilizzare l'oggetto System.OperatingSystem, quindi filtrare sui numeri di versione minore & Major.

Ho usato queste funzioni in passato:

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 è ancora Win32NT se il sistema operativo è a 64 bit? – AngryHacker

+2

@AngryHacker PlatformID.Win32 = "Il sistema operativo è Windows NT o successivo.", Quindi sì. – ParmesanCodice

+1

Ho cambiato il codice per IsWinXp per verificare se è Windows XP o superiore. Lo stesso con Vista. – AngryHacker

9

Verificare la proprietà Major è maggiore o uguale a 5, e se 5 quindi Minor è almeno 1. (XP era 5.1, 2003 era 5.2, Vista/2008 erano 6.0).

List of Windows Version Numbers on MSDN.

+2

... e Windows 7 è 6.1 – Esko

+3

Nota che WinXP a 32 bit è la versione 5.1; WinXP 64-bit è la versione 5.2. –

+0

E questo è esattamente il motivo per cui dovresti cercare la cosa che ti serve invece di controllare il numero della versione, e perché Win7 è la versione 6.1 e non la 7.0. Controllare il numero di versione è facile da sbagliare e non sempre ti dice cosa volevi sapere. – Stewart

5

Non si dovrebbe verificare il numero di versione. Invece, dovresti verificare la funzionalità di cui hai bisogno. Se si tratta di un'API specifica, ad esempio LoadLibrary e GetProcAddress, in questo modo, non si dipende dal numero di versione.

+0

Dato che una dipendenza è la ragione per cui ha bisogno della versione, questa è davvero una buona idea. – daramarak

+0

Come si controlla se il sistema operativo supporta RegFree COM? – AngryHacker

+0

Prova a caricare un componente dal manifest. Se non funziona, la piattaforma non supporta regfree COM – Stewart