c# - Je to dobrý způsob, jak určit architekturu OS?

original title: "c# - Is this a good way to determine OS Architecture?"


Translate

Since the WMI class Win32_OperatingSystem only includes OSArchitecture in Windows Vista, I quickly wrote up a method using the registry to try and determine whether or not the current system is a 32 or 64bit system.

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

It's worked out pretty well for us so far, but I'm not sure how much I like looking through the registry. Is this a pretty standard practice or is there a better method?

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



Protože třída WMI Win32_OperatingSystem zahrnuje pouze OSArchitecture v systému Windows Vista, rychle jsem napsal metodu pomocí registru, abych se pokusila zjistit, zda je současný systém ...

Toto je shrnutí po překladu. Pokud potřebujete zobrazit celý překlad, klikněte na ikonu „přeložit“


Všechny odpovědi
  • Translate

    Take a look at Raymond Chens solution:

    How to detect programmatically whether you are running on 64-bit Windows

    and here's the PINVOKE for .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.


  • Translate

    The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.

    I believe the value of IntPtr.Size is 4 for a 32bit app that's running under WOW, isn't it?

    Edit: @Edit: Yeah. :)


  • Translate

    The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.

    EDIT: Doh! This will tell you whether or not the current process is 64-bit, not the OS as a whole. Sorry!


  • Translate

    Looking into the registry is perfectly valid, so long as you can be sure that the user of the application will always have access to what you need.