Este o modalitate bună de a determina sistemul de operare al sistemului de operare?

Deoarece clasa WMI Win32_OperatingSystem include doar OSArchitecture în Windows Vista, am scris rapid o metodă care folosește registrul pentru a încerca să determine dacă sistemul actual este sau nu sistem de 32 sau 64 de biți.

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;
    }
}

A fost foarte bine pentru noi până acum, dar nu știu cât de mult îmi place să mă uit prin registru. Este o practică destul de standard sau există o metodă mai bună?

Edit: Wow, that code looks a lot prettier in the preview. I'll consider linking to a pastebin or something, next time.

0
fr hi bn

4 răspunsuri

Privind în registru este perfect valabil, atâta timp cât vă puteți asigura că utilizatorul aplicației va avea întotdeauna acces la ceea ce aveți nevoie.

0
adăugat

Cea mai ușoară modalitate de a testa pentru 64 de biți în .NET este de a verifica valoarea IntPtr.Size.

Cred că valoarea IntPtr.Size este de 4 pentru o aplicație pe 32 de biți care rulează sub WOW, nu-i așa?

Edit: @Edit: Yeah. :)

0
adăugat

Aruncati o privire la solutia Raymond Chens:

Cum se detectează programatic dacă rulezi pe Windows pe 64 de biți

și aici este PINVOKE pentru .NET:

IsWow64Process (kernel32)

Update: I'd take issue with checking for 'x86'. Who's to say what intel's or AMD's next 32 bit processor may be designated as. The probability is low but it is a risk. You should ask the OS to determine this via the correct API's, not by querying what could be a OS version/platform specific value that may be considered opaque to the outside world. Ask yourself the questions, 1 - is the registry entry concerned properly documented by MS, 2 - If it is do they provide a definitive list of possible values that is guaranteed to permit you as a developer to make the informed decision between whether you are running 32 bit or 64 bit. If the answer is no, then call the API's, yeah it's a but more long winded but it is documented and definitive.

0
adăugat

Cel mai simplu mod de a testa pentru 64 de biți în .NET este de a verifica valoarea IntPtr.Size.

EDIT: Doh! Acest lucru vă va spune dacă procesul curent este sau nu pe 64 de biți, nu pe sistemul de operare ca întreg. Ne pare rău!

0
adăugat