L'identification de l'architecture du PROCESSEUR de type à l'aide de C#
Je veux vérifier quel est le PROCESSEUR de l'architecture est l'utilisateur en cours d'exécution, est-il
i386 ou 64 ou AMD64. Je veux le faire en C#.
Je sais que je peux essayer de WMI ou de Registre. Est-il un autre moyen en dehors de ces deux?
Mon projet objectifs .NET 2.0!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également essayer (ne fonctionne que si elle n'est pas manipulée):
Ce qui m'a amené ici est de vérifier pour un 32 vs 64 bits de l'OS. la cote la plus élevée réponse est à la recherche à la processus Actuel. Après ne pas trouver de réponse, j'ai trouvé le paramètre suivant. Espérons que cela fonctionne pour vous.
System.Environment.Is64BitProcess
était plus utile dans mon cas (ensemble de laPATH
variable pour le "corriger"sqlite3.dll
basé sur l'architecture). Le système d'exploitation était en effet 64 bits dans mon cas, mais à cause d'une autre bibliothèque, j'ai dû compiler mon application 32 bits.Voici un morceau de code qui semble fonctionner (basé sur le P/Invoke):
avec
Note ce code de réutilisation de l'existant du CLR ProcessorArchitecture enum, et prend en charge .NET framework 2 et plus.
SYSTEM_INFO
utilisationDWORD
etWORD
qui sont à la fois non signé. Tout dans votre structure est signé.. cela pourrait causer des problèmes si vous utilisez d'autres membres de cette structure.Win32_Processor Classe WMI va faire le travail. Utilisation MgmtClassGen.exe pour générer fortement typées wrappers.
Enfin les plus brefs astuce pour résoudre la plate-forme/processeur d'architecture en cours d'exécution runtime CLR en C# est:
Ici Le Module.GetPEKind retourne un ImageFileMachine énumération, qui existe depuis .NET v2:
Pourquoi ne pas utiliser
new AssemblyName(fullName)
outypeof(object).Assembly.GetName()
?Eh bien, il est ce
HACK
commentaire ASP.NET MVC code source (depuis la 1.0):Voir qu'ils utilisent certains des trucs pour eux-mêmes. Malheureusement, la
AssemblyName
constructeur n'a pas réglé leProcessorArchitecture
champ de façon appropriée, c'est justeNone
pour toute nouvelle AssemblyName.Donc, pour les futurs lecteurs, laissez-moi vous recommandons d'utiliser ce vilain GetPEKind avec ImageFileMachine!
Notes:
Cela dit, la seule exception est qu'un I386 exécution peuvent s'exécuter sur un système AMD64.
Je sais que cette question est du passé, mais à partir de 2017, il existe maintenant une méthode simple pour connaître l'architecture de la procédure en cours, en .net standard :
La valeur retournée est l'un des X86, X64, ARM, ARM64 et donne à l'architecture du processus, il est en cours d'exécution.
OSArchitecture
renvoie l'architecture du système d'exploitation installé à la place.Des liens vers les docs (assez inutile si...):
RuntimeInformation.ProcessArchitecture:
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.runtimeinformation.processarchitecture?view=netstandard-1.4
L'Architecture de l'énumération:
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.architecture?view=netstandard-1.4
Peut-être cette CodeProject article peut aider? Il utilise le ManagementObjectSearcher dans le Système.La gestion de l'espace de noms pour rechercher du matériel info.
En fonction de pourquoi vous voulez savoir, vous trouverez peut-être que la vérification de la taille de la IntPtr structure est le moyen le plus facile.
Vous pourriez demander à l'utilisateur, peut-être?
Juste une blague bien sûr... je pense que WMI est ce que vous pouvez utiliser pour cela. Mais peut-être qu'il y a une autre manière?
Si vous allez pour WMI puis LinqToWmi pourrait leur être utile. J'ai essayé une fois, et il semblait assez simple =) -> http://www.codeplex.com/linq2wmi
Je crois que vous devriez éviter les ballonnements comme WMI et LINQ.. et vous aurez finalement, pour obtenir plus d'info comme vous allez le long, dont aucun n'est satisfait par pléthorique des api et des cadres.
Il suffit d'invoquer une dll que les appels et les extraits de CPUID info. C++/CLI ou pinvoke serait de faire et d'obtenir toutes les informations dont vous avez besoin sur le vendeur. Vous devez d'abord voir si l'enseignement est pris en charge (99% du temps c'est).
Pour obtenir rapidement vers le haut et en cours d'exécution est de vérifier le site d'intel pour wincpuid de l'échantillon et de l'extrait de la pièce de cpuid.h à partir de là. Il y a que 2 vendeurs et l'on est bon avec la latence de la mémoire et de l'autre ne l'est pas (comme native vs code managé). Ainsi, vous aurez des problèmes avec Mono sur d'autres architectures, etc (qui n'a pas d'ailleurs). Comme pour x64 vous le savez déjà ou tout simplement obtenir le corflags (son et déjà de tuer votre client disque dur avec .La distribution de moustiquaires )..
(http://software.intel.com/en-us/articles/api-detects-ia-32-and-x64-platform-cpu-characteristics/)
Ce qui semble le plus simple pour moi:
Comment à ce sujet?
Cependant
case *.Arm:
n'est pas encore testé.Voici ce que j'ai fait:
Si vous êtes en 64 bits architecture, vous aurez deux fichier de programme des variables d'environnement. Si vous êtes sur x86, vous aurez seulement une.