Est-ce une bonne façon de déterminer Architecture des systèmes d'exploitation?

StackOverflow https://stackoverflow.com/questions/3903

  •  08-06-2019
  •  | 
  •  

Question

Depuis la classe WMI Win32_OperatingSystem ne comprend OSArchitecture dans Windows Vista, j'ai rapidement écrit une méthode utilisant le registre de l'essayer et de déterminer si oui ou non le système actuel est un 32 ou 64 bits du système.

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

C'est très bien pour nous jusqu'à présent, mais je ne suis pas sûr de savoir comment beaucoup j'aime regarder par la base de registre.Est-ce une jolie norme de pratique ou est-il une meilleure méthode?

Modifier:Wow, que le code ressemble beaucoup plus jolie dans l'aperçu.Je vais créer un lien vers un pastebin ou quelque chose, la prochaine fois.

Était-ce utile?

La solution

Jetez un oeil à Raymond Chen solution:

Comment détecter par programme si vous êtes en cours d'exécution sur Windows 64 bits

et voici le PINVOKE pour .NET:

IsWow64Process (kernel32)

Mise à jour: Je prendrais le problème avec la vérification de 'x86'.Qui peut dire ce que intel ou AMD prochaine 32 bits processeur peut être désigné comme.La probabilité est faible, mais c'est un risque.Vous devriez demander au système d'exploitation afin de déterminer ce via les API, pas par l'interrogation de ce que pourrait être une version de l'OS/plate-forme spécifique dont la valeur peut être considérée comme opaque pour le monde extérieur.Posez-vous les questions 1 - est de l'entrée de registre concerné correctement documentée par MS, 2 - Si c'est donner une liste définitive des valeurs possibles qui est garanti pour vous permettre de vous en tant que développeur de faire la décision éclairée entre vous sont en cours d'exécution 32 bits ou 64 bits.Si la réponse est non, alors l'appel de l'API, oui, c'est un, mais plus longue haleine, mais elle est bien documentée et définitive.

Autres conseils

La façon la plus simple de test pour la version 64 bits sous .NET est de vérifier la valeur de IntPtr.Taille.

Je crois que la valeur de IntPtr.La taille est de 4 pour une application 32 bits qui fonctionne sous WOW, n'est-ce pas?

Modifier:@Edit:Ouais.:)

La façon la plus simple de test pour la version 64 bits sous .NET est de vérifier la valeur de IntPtr.Taille.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top