c# - Ist dies ein guter Weg, um die Betriebssystemarchitektur zu bestimmen?

Translate

Da die WMI-Klasse Win32_OperatingSystem nur OSArchitecture in Windows Vista enthält, habe ich mithilfe der Registrierung schnell eine Methode geschrieben, um festzustellen, ob das aktuelle System ein 32- oder 64-Bit-System ist oder nicht.

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

Bisher hat es für uns ziemlich gut geklappt, aber ich bin mir nicht sicher, wie gerne ich die Registrierung durchschaue. Ist das eine ziemlich übliche Praxis oder gibt es eine bessere Methode?

Bearbeiten: Wow, dieser Code sieht in der Vorschau viel hübscher aus. Ich werde beim nächsten Mal in Betracht ziehen, auf einen Pastebin oder etwas anderes zu verlinken.

This question and all comments follow the "Attribution Required."

Alle Antworten

Kev
Translate

Schauen Sie sich die Lösung von Raymond Chens an:

So erkennen Sie programmgesteuert, ob Sie unter 64-Bit-Windows ausgeführt werden

und hier ist der PINVOKE für .NET:

IsWow64Process (kernel32)

Aktualisieren:Ich würde Probleme haben, nach 'x86' zu suchen. Wer sagt, welcher Intel- oder AMD-nächste 32-Bit-Prozessor kann als bezeichnet werden? Die Wahrscheinlichkeit ist gering, aber es ist ein Risiko. Sie sollten das Betriebssystem bitten, dies über die richtigen APIs zu ermitteln, und nicht, indem Sie abfragen, welcher betriebssystemversions- / plattformspezifische Wert für die Außenwelt als undurchsichtig angesehen werden kann. Stellen Sie sich die Fragen: 1 - Ist der betreffende Registrierungseintrag von MS ordnungsgemäß dokumentiert? 2 - Wenn dies der Fall ist, wird eine endgültige Liste möglicher Werte bereitgestellt, die es Ihnen als Entwickler garantiert ermöglicht, die fundierte Entscheidung zwischen Ihrer Ausführung zu treffen 32 Bit oder 64 Bit. Wenn die Antwort Nein lautet, rufen Sie die APIs auf. Ja, es ist etwas langwieriger, aber es ist dokumentiert und endgültig.

Quelle
Translate

Der einfachste Weg, unter .NET auf 64-Bit zu testen, besteht darin, den Wert von IntPtr.Size zu überprüfen.

Ich glaube, der Wert von IntPtr.Size ist 4 für eine 32-Bit-App, die unter WOW läuft, nicht wahr?

Bearbeiten: @Edit: Ja. :) :)

Quelle
Translate

Der einfachste Weg, unter .NET auf 64-Bit zu testen, besteht darin, den Wert von IntPtr.Size zu überprüfen.

EDIT: Doh! Hier erfahren Sie, ob der aktuelle Prozess 64-Bit ist und nicht das gesamte Betriebssystem. Es tut uns leid!

Quelle
Translate

Ein Blick in die Registrierung ist absolut gültig, solange Sie sicher sein können, dass der Benutzer der Anwendung immer Zugriff auf das hat, was Sie benötigen.

Quelle