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.

È stato utile?

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:

IsWow64Process (kernel32)

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top