È un buon modo per determinare l'architettura del sistema operativo?
Domanda
Poiché la classe WMI Win32_OperatingSystem include solo OSArchitecture in Windows Vista, ho rapidamente scritto un metodo utilizzando il registro per provare a determinare se il sistema attuale è o meno un sistema a 32 o 64 bit.
private Boolean is64BitOperatingSystem()
{
RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");
if (processorArchitecture.Equals("x86")) {
return false;
}
else {
return true;
}
}
Finora ha funzionato abbastanza bene per noi, ma non sono sicuro di quanto mi piaccia guardare il registro.È una pratica abbastanza standard o esiste un metodo migliore?
Modificare:Wow, quel codice sembra molto più carino nell'anteprima.Prenderò in considerazione il collegamento a un pastebin o qualcosa del genere, la prossima volta.
Soluzione
Dai un'occhiata alla soluzione di Raymond Chen:
Come rilevare a livello di codice se stai utilizzando Windows a 64 bit
ed ecco il PINVOKE per .NET:
Aggiornamento: Avrei problemi con il controllo di "x86".Chi può dire come potrebbe essere designato il prossimo processore Intel o AMD a 32 bit?La probabilità è bassa ma è un rischio.Dovresti chiedere al sistema operativo di determinarlo tramite le API corrette, non interrogando quale potrebbe essere un valore specifico della versione del sistema operativo/della piattaforma che potrebbe essere considerato opaco per il mondo esterno.Ponetevi le domande, 1 - la voce di registro in questione è adeguatamente documentata da MS, 2 - Se lo è, fornisce un elenco definitivo di possibili valori che garantisce che voi come sviluppatore possiate prendere una decisione informata se state eseguendo 32 bit o 64 bit.Se la risposta è no, chiama le API, sì, è un po' più prolisso ma è documentato e definitivo.
Altri suggerimenti
Il modo più semplice per verificare la versione a 64 bit in .NET consiste nel verificare il valore di IntPtr.Size.
Credo che il valore di IntPtr.Size sia 4 per un'app a 32 bit in esecuzione su WOW, non è vero?
Modificare:@Modificare:Sì.:)
Il modo più semplice per verificare la versione a 64 bit in .NET consiste nel verificare il valore di IntPtr.Size.
MODIFICARE:Doh!Questo ti dirà se il processo corrente è o meno a 64 bit, non il sistema operativo nel suo insieme.Scusa!
Consultare il registro è perfettamente valido, purché tu possa essere sicuro che l'utente dell'applicazione avrà sempre accesso a ciò di cui hai bisogno.