Benoît Laut
Développement x86 et x64 avec le Framework .Net
Aujourd’hui nous sommes dans une période de transition où 2 types de systèmes d’exploitation cohabitent, les OS 32bits et les OS 64bits. Je vous propose de découvrir leurs spécificités afin de les prendre en compte dans vos applications.
Par Benoît Laut publié le 05/07/2010 à 07:48, lu 4860 fois, 6 pages
 4 | Accès explicite aux répertoires et à la base de registre
Dans certains cas, il arrive que nous ayons besoin d’accéder, depuis notre application, au répertoire Program Files(x86) ou encore à la base de registre 32bits. Si notre application est compilée en x86, nous n’avons aucun code spécifique à écrire, il suffit d’utiliser les méthodes présentées dans le chapitre précédent. Dans le cas où notre application est compilée en x64, nous savons que ces méthodes ne fonctionneront pas, car elles nous retourneront les chemins classiques x64. Dans ce cas le Framework 4.0 met à notre disposition des nouvelles valeurs dans l’énumération Environment.SpecialFolder, que nous pouvons utiliser de cette manière :

Console.WriteLine("ProgramFilesX86 : {0}",

    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86));

Console.WriteLine("CommonProgramFilesX86 : {0}",

    Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFilesX86));

Console.WriteLine("SystemX86 : {0}",

    Environment.GetFolderPath(Environment.SpecialFolder.SystemX86));

A l’exécution de notre application sur un OS 64bits (compilé en x86, x64 ou Any CPU), nous obtenons ceci :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image6.png
 
Pour la base de registre, il suffit de mettre le chemin complet vers la clé de registre 32bits :

var key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Wow6432Node\Bewise");

Avec ces nouveautés, une problématique se pose.
Si l’on veut accéder spécifiquement au répertoire 32bits ou à la base de registre 32bits d’un OS 64bits en utilisant les méthodes présentées ci-dessus, il nous faut d’abord savoir si ces répertoires existent. C’est à dire qu’il nous faut savoir si l’OS est un OS 64bits pour une application console, ou si le process de notre application, qui peut être hosté par un tiers, tourne en 32 ou en 64bits.
Pour connaitre ces spécificités, le Framework 4.0 met à disposition 2 nouvelles propriétés qui sont Environment.Is64BitOperationSystem et Environment.Is64BitProcess :

Console.WriteLine("Is64BitOperatingSystem : {0}", Environment.Is64BitOperatingSystem);

Console.WriteLine("Is64BitProcess : {0}", Environment.Is64BitProcess);

 
» Démarrer une discussion