Frage

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

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 sehr es mir gefällt, die Registrierung durchzusehen.Ist das eine ziemlich übliche Vorgehensweise oder gibt es eine bessere Methode?

Bearbeiten:Wow, dieser Code sieht in der Vorschau viel hübscher aus.Ich werde beim nächsten Mal darüber nachdenken, einen Link zu einem Pastebin oder so zu erstellen.

War es hilfreich?

Lösung

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

So erkennen Sie programmgesteuert, ob Sie ein 64-Bit-Windows verwenden

und hier ist der PINVOKE für .NET:

IsWow64Process (kernel32)

Aktualisieren: Ich hätte Probleme damit, nach „x86“ zu suchen.Wer kann sagen, als was der nächste 32-Bit-Prozessor von Intel oder AMD bezeichnet werden könnte?Die Wahrscheinlichkeit ist gering, aber es besteht ein Risiko.Sie sollten das Betriebssystem bitten, dies über die richtigen APIs zu ermitteln, und nicht durch die Abfrage eines möglicherweise betriebssystemversions-/plattformspezifischen Werts, der für die Außenwelt als undurchsichtig angesehen werden könnte.Stellen Sie sich die Fragen: 1 - Ist der betreffende Registrierungseintrag von MS ordnungsgemäß dokumentiert? 2 - Ist dies der Fall, stellen sie eine endgültige Liste möglicher Werte bereit, die es Ihnen als Entwickler garantiert ermöglicht, eine fundierte Entscheidung darüber zu treffen, ob Sie ihn ausführen 32 Bit oder 64 Bit.Wenn die Antwort „Nein“ lautet, rufen Sie die APIs an. Ja, es ist zwar etwas langatmiger, aber dokumentiert und eindeutig.

Andere Tipps

Der einfachste Weg, 64-Bit unter .NET 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:@Bearbeiten:Ja.:) :)

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

BEARBEITEN:Doh!Dadurch erfahren Sie, ob der aktuelle Prozess 64-Bit ist oder nicht, nicht das Betriebssystem als Ganzes.Entschuldigung!

Ein Blick in die Registrierung ist völlig zulässig, solange Sie sicher sein können, dass der Benutzer der Anwendung immer Zugriff auf das hat, was Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top