Aucun des éléments suivants n'est un contenu original (je citerai du mieux que je peux), mais je vais vous aider à rassembler des informations sur cette situation.
Si vous utilisez .Net 4 ou supérieur, arrêtez de lire maintenant. Ceci est construit dans le cadre (consultez System.Environment.get_is64bitoperatingsystem)
Pour tout le reste, il y a un certain nombre d'options que j'ai rencontrées en cours de route.
Solution 1: temps de compilation des directives
Blog MSDN de Raymond Chen: http://blogs.msdn.com/b/oldnewthing/archive/2005/02/01/364563.aspx
BOOL Is64BitWindows()
{
#if defined(_WIN64)
return TRUE; // 64-bit programs run only on Win64
#elif defined(_WIN32)
// 32-bit programs run on both 32-bit and 64-bit Windows
// so must sniff
BOOL f64 = FALSE;
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
return FALSE; // Win64 does not support Win16
#endif
}
Crédits cette solution: les points @Thorarin à un dup. fil où Stefan Schultze liens vers cet article. Je ne suis pas sûr que le fil est une dupe cependant. L'auteur dit spécifiquement qu'il vérifie la plate-forme du système d'exploitation. Je ne suis pas sûr que l'intention est de découvrir si votre application fonctionne en mode 32 bits ou 64 bits.
Solution 2: pointeur Observations Je vais céder la parole à @max pour celui-ci et vient d'ajouter l'article MSDN suivant pour une lecture supplémentaire: http://msdn.microsoft.com/en-us/library/system.intptr.size.aspx Le bit à savoir: la taille du pointeur sur 32 bits = 4, sur 64 bits = 8.
Donnez à l'homme un point!
Solution 3: Utilisation de WinAPI - AKA - Vers l'enfer w /.Net, je vais découvrir ma putain de moi! http://msdn.microsoft.com/en-us/library/ms684139(v=vs.85).aspx
BOOL WINAPI IsWow64Process(
__in HANDLE hProcess,
__out PBOOL Wow64Process
);
Notes: Il y a hacks tels que la recherche de "Program Files (x86)", ou regarder vos drapeaux d'architecture de processeur.
Les problèmes avec ces méthodes que
- Ils comptent sur les noms de dossiers communs qui ne peuvent pas tenir dans les installations « personnalisées »
- drapeau x64 du processeur ne sera pas toujours refléter votre état d'exécution actuel. Êtes-vous sûr d'avoir compilé pour "Any CPU"? Exécution d'un système d'exploitation 32 bits sur un processeur 64 bits?
Idéalement, vous ne devriez pas compter sur des indicateurs externes et chercher plutôt des indices dans le domaine actuel. Nous voulons que toutes les solutions (dans la mesure du possible) soient à l'épreuve des bombes.
duplication possible de [Comment détecter plateforme Windows 64 bits avec .net?] (Http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform-with-net) – Thorarin
Ne supposez pas que Windows sera toujours installé dans le dossier C: \ Windows \. –
donc je suppose que c'est ok si je fais ceci: if (Directory.Exists (Environment.GetEnvironmentVariable ("SystemRoot") + "\\ SysWow64")) // Dans ce cas, nous traitons OS 64 bits – Koen