c# - Est-ce un bon moyen de déterminer l'architecture du système d'exploitation?

Translate

Étant donné que la classe WMI Win32_OperatingSystem n'inclut que OSArchitecture dans Windows Vista, j'ai rapidement rédigé une méthode utilisant le registre pour essayer de déterminer si le système actuel est ou non un système 32 ou 64 bits.

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

Cela a plutôt bien fonctionné pour nous jusqu'à présent, mais je ne sais pas à quel point j'aime regarder dans le registre. Est-ce une pratique assez courante ou existe-t-il une meilleure méthode?

Éditer: Wow, ce code est beaucoup plus joli dans l'aperçu. J'envisagerai de créer un lien vers un pastebin ou quelque chose, la prochaine fois.

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

Toutes les réponses

Kev
Translate

Jetez un œil à la solution Raymond Chens:

Comment détecter par programme si vous utilisez Windows 64 bits

et voici le PINVOKE pour .NET:

IsWow64Process (noyau32)

Mettre à jour:Je ne voudrais pas vérifier «x86». Qui peut dire quel processeur 32 bits d'Intel ou d'AMD pourrait être désigné. La probabilité est faible mais c'est un risque. Vous devez demander au système d'exploitation de le déterminer via les API appropriées, et non en interrogeant ce qui pourrait être une valeur spécifique à une version / plate-forme du système d'exploitation qui peut être considérée comme opaque pour le monde extérieur. Posez-vous les questions, 1 - l'entrée de registre concernée est-elle correctement documentée par MS, 2 - Si c'est le cas, fournit-elle une liste définitive de valeurs possibles qui vous permettra en tant que développeur de prendre une décision éclairée entre si vous exécutez 32 bits ou 64 bits. Si la réponse est non, alors appelez les API, oui c'est un mais plus long mais c'est documenté et définitif.

La source
Translate

Le moyen le plus simple de tester 64 bits sous .NET consiste à vérifier la valeur de IntPtr.Size.

Je pense que la valeur d'IntPtr.Size est de 4 pour une application 32 bits exécutée sous WOW, n'est-ce pas?

Éditer: @Edit: Ouais. :)

La source
Translate

Le moyen le plus simple de tester 64 bits sous .NET consiste à vérifier la valeur de IntPtr.Size.

EDIT: Doh! Cela vous dira si le processus actuel est 64 bits ou non, et non le système d'exploitation dans son ensemble. Désolé!

La source
Translate

La recherche dans le registre est parfaitement valide, tant que vous pouvez être sûr que l'utilisateur de l'application aura toujours accès à ce dont vous avez besoin.

La source