12
votes

Comment puis-je déterminer le "bit-ness" sous lequel mon application C # est exécutée?

Une dll .NET peut être exécutée comme 32 bits et 64 bits sur une machine avec un processeur X64. J'ai besoin de déterminer au moment de l'exécution Quelle bizarre mon application fonctionne sous.

Actuellement, je fais quelque chose comme system.intptr.size == 8 , mais cela semble être un piratage laid. Y a-t-il un moyen plus "correct" de déterminer cela?


4 commentaires

C'est ce que Microsoft conseille ... msdn.microsoft.com/en-us/library /ms973190.aspx


Notez que si vous spécifiez la compilation sous X86, toute application normale sur un système d'exploitation 64 bits exécutera 64 bits. Des exceptions se produisent lorsque vous courez dans d'autres processus.


Vérifiez ici: Stackoverflow.com/Questtions/336633/...


Ce n'est pas un piratage laid, il est élégant. Non seulement la saleté pas cher, il exprime directement ce qui est différent d'environ 64 bits.


3 Réponses :


24
votes

in .NET 4 et au-delà, y compris .NET CORE, le System.Environment classe a deux propriétés statiques: IS64BitoperatingSystem et is64bitprocrocess . Dans les versions .NET précédentes, vous devez utiliser l'approche de taille intPTR .


5 commentaires

Vous devez également vérifier si le processus est exécuté sous Wow64 dans les versions .NET précédant 4. Vérification de la taille du pointeur n'est pas suffisante.


@George: Je ne veux pas que l'anchement du système d'exploitation, je souhaite la bitness mon code utilise. Par conséquent, ce que Richard décrit est juste. Vérification de cette réponse car elle a le plus de upvotes; Malheureusement, je ne peux pas utiliser .NET 4 :(


Ummm, sûrement la réponse acceptée est la bonne, pas celle avec les plus upvotes qui sont, comme vous l'admettez même, incorrecte pour votre situation ...


@Adam: Quand il n'y a pas de réponse «correcte» pour ma situation affichée, il faut choisir la meilleure des alternatives restantes.


@Billy en fait, vous pouvez répondre à la poste vous-même pour fournir la réponse correcte et la marquer comme acceptée - vous obtiendrez même un badge pour cela, je pense :-)



2
votes

in .NET 4.0 Vous pouvez utiliser

Environment.Is64BitProcess and
Environment.Is64BitOperatingSystem


0 commentaires

5
votes

pré .NET 4 Il a été suggéré d'utiliser la taille d'un intPTR (4 pour 32 bits et 8 pour 64 bits). Cependant, cela ne vous donne pas la bouchée de la machine - Cela vous donne la bouchée du CLR utilisé.

C'est une différence importante si vous courez dans un processus de 32 bits, tels que des add-ins applications. J'ai un message de blog sur la recherche des machines bitness à base de WMI:

http://adamhouldsworth.blogspot.com/ 2010/03 / 64bit-Registry-de-32bit-Application.html

Notez cependant que je ne suis toujours pas clair si cela représentera vraiment la boite du système d'exploitation actuelle (comme il utilise le processeur).

Pour la vaste majorité des situations, sous la compilation normale (AnyCPU) exécutant votre propre application, intPTR suffira.

in .NET 4, comme d'autres personnes ont dit, il y a maintenant environnement.is64bacrocrocess et environnement.is64bitoperatingsystem .


2 commentaires

Je ne veux pas l'Os Bité, je veux ma bizarre :)


Ensuite, cela va bien, int.