Comment mon application C # peut-elle vérifier si une application / un processus particulier (note: pas le processus actuel) s'exécute en mode 32 bits ou 64 bits?
Par exemple, je pourrais vouloir interroger un processus particulier par son nom, c'est-à-dire «abc.exe», ou en fonction du numéro d'identification du processus.
c#
process
32bit-64bit
satya
la source
la source
Réponses:
L'une des façons les plus intéressantes que j'ai vues est la suivante:
Pour savoir si AUTRES processus s'exécutent dans l'émulateur 64 bits (WOW64), utilisez ce code:
la source
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
Et c'est pourquoi Microsoft doit créer des shims de compatibilité de version - pour contourner les bogues dans un code comme celui-là. Que se passe-t-il lorsque Windows Vista (6.0) sort? Et les gens ont ensuite critiqué Microsoft pour avoir créé Windows 7 version 6.1 plutôt que 7.0, il corrige tant de bogues de compatibilité d'application.processHandle = Process.GetProcessById(process.Id).Handle;
au lieu de justeprocessHandle = process.Handle;
?Si vous utilisez .Net 4.0, il s'agit d'une ligne unique pour le processus actuel:
Voir Environment.Is64BitProcessProperty (MSDN).
la source
Is64BitProcess
? Peut-être que je peux utiliser ce qu'il fait pour savoir si je suis en cours d'exécution en tant que processus 64 bits.Is64BitProcess
( referencesource.microsoft.com/#mscorlib/system/environment.cs ). Cependant, il ne s'agit que d'une instruction return codée en dur, contrôlée par le symbole de compilation.La réponse sélectionnée est incorrecte car elle ne fait pas ce qui a été demandé. Il vérifie si un processus est un processus x86 exécuté sur un système d'exploitation x64 à la place; il retournera donc "false" pour un processus x64 sur un système d'exploitation x64 ou un processus x86 fonctionnant sur un système d'exploitation x86.
En outre, il ne gère pas correctement les erreurs.
Voici une méthode plus correcte:
la source
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
retournera toujours vrai pour un processus 32 bits. Mieux vaut utiliserSystem.Environment.Is64BitOperatingSystem
si .NET4 est pris en chargeVous pouvez vérifier la taille d'un pointeur pour déterminer s'il s'agit de 32 bits ou 64 bits.
la source
la source
Voici la vérification en une ligne.
la source
J'aime utiliser ceci:
De cette façon, si j'ai besoin de localiser ou de vérifier un fichier, je peux facilement écrire:
la source
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
au lieu de coder en dur `C: \ Program Files`?