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
 3 | Accès implicite aux répertoires et à la base de registre
Lorsque vous développez une application avec Visual Studio, vous pouvez choisir de compiler votre application en x86, en x64 ou en Any CPU. Dans les 2 premiers cas, vous maitrisez totalement le contexte d’exécution de votre application. Dans le troisième cas, cela dépendra de l’OS sur lequel sera installée votre application. Pour gérer les spécificités des plateformes 64bits sur l’accès aux ressources physiques ou en base de registre, le Framework .Net (et pas uniquement le 4.0 mais également les versions antérieures 2.0 et 3.5) fournit des outils qui le font pour nous de manière transparente.
La récupération des chemins \Program Files et Windows\System32 se fait avec le framework via la méthode string Environment.GetSpecialFolder(Environment.SpecialFolder).
Le code ci-dessous illustre l’utilisation de cette méthode :

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

    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));

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

    Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles));

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

    Environment.GetFolderPath(Environment.SpecialFolder.System));

Si je compile cette application en x86 je vais avoir le résultat suivant :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image1.png
 
Avec une compilation en x64, nous avons le résultat suivant :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image2.png
 
Et en Any CPU, tout dépendra du host de mon application. Si le host est en 64bits, mon application console s’exécutera en 64bits, et sur un host 32bits, l’application s’exécutera en 32bits. Par exemple Visual Studio n’existe qu’en version 32 bits, si l’on développe un plugin pour Visual Studio, nous devrons le compiler en 32bits ou en Any CPU, car le host, Visual Studio, est en 32bits.
De la même manière la création d’une clé dans la base de registre est totalement transparente. Le code suivant crée la clé Bewise dans HKLM\SOFTWARE :

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

Console.WriteLine(key.Name);

 
A l’exécution de ce code, que l’on soit en 64bits ou en 32bits, la propriété Name retourne la même valeur :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image3.png
 
Cependant, si je compile mon application en x64, la clé est créée dans HKLM\SOFTWARE :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image4.png
 
Et si je compile l’application en x86, la clé est créée dans HKLM\SOFTWARE\WOW6432Node :
 
/content/f2f46c62-2676-40a6-aeaf-82fa744a6a80/image5.png
 
 
» Démarrer une discussion