Vra

Sedert die WMI klas Win32_OperatingSystem sluit slegs OSArchitecture in Windows Vista, het ek vinnig geskryf het 'n metode met behulp van die register te probeer bepaal of die huidige stelsel is 'n 32 of 64bit stelsel.

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

Dit is uitgewerk baie goed vir ons tot dusver, maar ek is nie seker hoeveel ek hou daarvan om te kyk deur middel van die register. Is dit 'n redelik standaard praktyk of is daar 'n beter metode?

Edit : Sjoe, dit code lyk baie mooier in die voorskou. Ek sal dit oorweeg 'n skakel na 'n pastebin of iets, volgende keer.

Was dit nuttig?

Oplossing

Neem 'n blik op Raymond Chens oplossing:

Hoe om programmaties of jy loop op 64- spoor bit Windows

en hier is die PINVOKE vir NET:

IsWow64Process (kernel32)

Update: Ek wil kwessie neem met die beheer van vir 'x86 ". Wie is om te sê wat Intel se of AMD se volgende 32 bit verwerker kan aangewys word as. Die waarskynlikheid is laag, maar dit is 'n risiko. Jy moet die bedryfstelsel vra om dit te bepaal deur middel van die korrekte API's, nie deur die gebruik daarvan wat 'n OS weergawe / platform spesifieke waarde wat ondeursigtig om die res van die wêreld kan oorweeg kon word. Vra jouself die vrae, 1 - is die betrokke behoorlik gedokumenteer deur MS, 2 register inskrywing - As dit is doen hulle 'n definitiewe lys van moontlike waardes wat gewaarborg is om jou toe te laat as 'n ontwikkelaar om die ingeligte besluit tussen maak of jy ' 32 bit of 64 bit. As die antwoord is nee, dan bel die API's, ja dit is 'n maar meer lank asem maar dit is gedokumenteer en finaal.

Ander wenke

  

Die maklikste manier om te toets vir 64-bit onder NET is om die waarde van IntPtr.Size kyk.

Ek glo die waarde van IntPtr.Size is 4 vir 'n 32bit artikels wat hardloop onder Sjoe, is dit nie?

Edit : @Edit: Ja. :)

Die maklikste manier om te toets vir 64-bit onder NET is om die waarde van IntPtr.Size kyk.

EDIT: Doh! Dit sal jou vertel of die huidige proses is 64-bit, nie die bedryfstelsel as 'n geheel. Jammer!

Op soek na die register is heeltemal geldig, so lank as wat jy kan seker wees dat die gebruiker van die aansoek altyd toegang tot wat jy nodig sal hê.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top