Bien que je comprenne qu’il n’existe aucune raison fondamentale pour qu’un programme écrit pour du matériel / des systèmes d’exploitation 32 bits ne soit pas exécuté sur du matériel / des systèmes 64 bits, j’ai trouvé en pratique de nombreux programmes destinés aux versions 32 bits de Windows. travailler sur les versions 64 bits de Windows. Les exemples incluent un certain nombre d’utilitaires de sécurité populaires (la plupart des produits de Zone Alarm de Norton et Check Point) et plusieurs jeux (j’ai essayé de faire fonctionner Grand Theft Auto 4 pendant quelques semaines maintenant, mais en vain – bien sûr, cela pourrait être lié à un nombre quelconque d’autres problèmes liés à GTA4, mais ce n’est ni ici ni là).
J’ai entendu que l’incompatibilité d’un programme peut résulter de quelque chose d’aussi simple que de ne pas vouloir s’exécuter à partir du dossier “Program Files (x86)”, mais quelles sont les autres raisons? Pourquoi un antivirus ou un pare-feu écrit pour un système 32 bits ne serait-il pas exécuté sur un système 64 bits? Pourquoi un jeu ne fonctionnerait-il pas lorsque tout serait théoriquement rétrocompatible?
La meilleure explication que j’ai trouvée ici est celle qui dit essentiellement que les programmes 32 bits sont exécutés sur une couche d’émulation qui n’autorise pas l’access au système que vous obtenez des programmes natifs exécutés dans un environnement 64 bits:
http://blogs.msdn.com/oldnewthing/archive/2008/12/22/9244582.aspx
Je suppose que cela signifie que les problèmes avec des programmes tels que GTA4 proviennent de la couche d’émulation ne produisant pas les résultats attendus sur un système natif 32 bits. C’est pourquoi vous continuez à voir les mises à jour de compatibilité des versions Microsoft en permanence.
Voici ce que le MSDN a à dire à ce sujet:
http://msdn.microsoft.com/en-us/library/bb427430(VS.85).aspx
Il y a beaucoup de désinformation sur ce sujet.
Lorsqu’une application 32 bits est exécutée sur des fenêtres 64 bits:
Les pilotes sont une autre histoire que les programmes: http://support.microsoft.com/kb/896456
Zone Alarm utilise un pilote spécial de 32 bits créé par Check Point pour effectuer la surveillance. C’est probablement ce qui crée le problème avec cette application. Quant à Grand Theft Auto 4? Je n’ai aucune idée.
Il peut y avoir un certain nombre de raisons.
Toute application qui est programmée à un niveau bas peut s’attendre à un registre de 32 bits. Le pilote Zone Alarm publié par novatrust est un bon exemple. GTA4 utilise peut-être assembly pour améliorer les performances à plusieurs points, ce qui peut entraîner quelque chose ou même simplement en supposant 32 bits sur C ++. Par exemple, prenez le code suivant:
struct GPoint { int x; int y; } // Array of twenty GPoints GPoint[] myArr = malloc(20 * sizeof(GPoint); GPoint* myPointer = myArr; int index = GetIndexAffectedPoint(); // Invert X and Y for the point myPointer += 8*index; swap(myPointer);
Je sais que l’exemple est assez naïf, mais de toute façon, dans ce code, vous supposez que struct est long de 8 octets (4 octets de l’entier x et 4 octets pour l’entier y) mais dans un système 64 bits est en réalité deux fois plus long vous finirez par échanger le mauvais point … des choses comme ça se produisent souvent sur des langages de bas niveau, surtout lorsque vous essayez d’améliorer les performances …
Les applications de sécurité sont un mauvais exemple. Ils exécutent tous des choses non sockets en charge contre les choses non documentées. Les changements entre une version 32 bits de Windows et la suivante sont suffisants pour les briser, ne pas passer à la version 64 bits.
Cela dit, il existe des correctifs de compatibilité qui corrigent votre code sur 32 bits, ce qui n’est pas le cas lorsque l’application est 64 bits . C’est parce que Microsoft suppose que vous l’avez testé sur 64 bits.
Un résultat obtenu est avec les applications .NET . Lorsqu’il est exécuté sur un système 32 bits, l’exe est jeté sur 32 bits – où il y a des cales de compatibilité pour réparer vos bogues. Si votre client s’exécute sur un système 64 bits, l’exécutable sera jeté sur 64 bits, où les shims de compatibilité qui vous étaient protégés ne sont plus présents.
Chris Jackson a eu un bon blog à ce sujet: Shimming Applications sur Windows Vista 64 bits
Le problème est probablement les pilotes. Avec les jeux, il s’agit probablement d’une sorte de système DRM visqueux. Essayez d’obtenir le crack sans CD pour le jeu afin de pouvoir l’exécuter sans DRM.
Considérations relatives à la migration de 32 à 64 bits
EDIT : Lien alternatif
Si vous utilisez le système de fichiers ou le registre, vérifiez que vous accédez aux bons dossiers . En tant que programme x86, vous souhaiterez probablement accéder à “Program Files (x86)”, “SysWOW64”, “WOW6232Node” et à de tels dossiers au lieu de x64.
Les produits avec des applications x86 telles que Norton et Zone Alarm de Check Point ne parviennent pas à exécuter leur pilote x86, car le pilote doit x64 pour pouvoir être exécuté par le système d’exploitation.