Windows 64 bits du registre c. s. Registre 32 bits
J'ai entendu sur Windows x64 l'architecture, à l'appui d'exécuter les versions x86 et x64 application, il y a deux/ensembles différents de registre de Windows, une pour x86 application de l'accès et de l'autre pour x64 demande d'accès? Par exemple, si un COM registres CLSID dans le x86 ensemble de registre, puis l'application x64 ne sera jamais en mesure d'accéder au composant COM CLSID, parce que x86/x64 ont différents ensembles de registre?
Donc, ma question est de savoir si ma compréhension de l'exemple ci-dessus est correcte? Je tiens également à obtenir certains documents à apprendre à ce sujet, sur les deux ensembles différents de registre sur une architecture 64 bits. (J'ai fait un peu de recherche, mais pas trouvé de précieux renseignements.)
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette question il n'ya pas longtemps. La réponse courte est que, si vous exécutez une version 32 bits sur une machine 64 bit alors c'est les clés de registre sont situés sous un Wow6432Node.
Par exemple, disons que vous avez une application qui stocke ses informations du registre en vertu de l':
Si vous compilez votre application en 64 bits binaires et de l'exécuter sur un ordinateur 64 bits alors les clés de registre sont dans l'emplacement ci-dessus. Toutefois, si vous compilez votre application comme une application 32 bits binaires et de l'exécuter sur un ordinateur 64 bits, alors vos informations de registre se trouve maintenant ici:
Cela signifie que si vous exécutez la version 32 bits et les versions 64 bits de votre application sur la même machine, alors ils seront à la recherche à un autre jeu de clés de registre.
Votre compréhension est correcte. Il n'y aurait pas besoin d'x64 application à accéder à la x86 Clsid depuis il n'a jamais pu charger les composants de toute façon, et vice-versa.
Si vous voulez créer un composant pour une utilisation par les versions x86 et x64, vous devez créer une paire de dll construit pour les architectures x86 et l'autre pour x64 et s'inscrire à la fois dans leurs parties appropriées de la base de registre. L'regsrv32.exe dans le dossier System32 va paradoxalement enregistrer le x64 composant et l'regsrv32.exe dans le dossier SysWOW64 va enregistrer le x86 composant.
Alternativement construire une .NET de l'assemblée pour n'Importe quel CPU, qui peut être utilisé par l'architecture du PROCESSEUR.
Ils ne sont pas de registres distincts-l'un est un sous-nœud de l'autre, et le système d'exploitation n'virtualisation pour s'assurer que les applications 32 bits obtenir leurs clés et 64 bits, les applications obtenir leurs clés.
HKEY_LOCAL_MACHINE\SOFTWARE\Google
il est silencieusement redirigé versHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Google
Voici l'article de Wikipédia sur l'WOW64 de registre qui peut vous donner de l'information que vous cherchez:
http://en.wikipedia.org/wiki/WOW64
Je lance un 64 bit machine comme mon bureau, et je n'ai jamais de problèmes avec les différentes configurations de registre.
Par MSDN, apparemment, il y a une différence:
http://msdn.microsoft.com/en-us/library/ms724072(SV.85).aspx
HTH
Comment vous inscrire .NET de l'assemblée pour être utilisé comme COM dans la pure application 64 bits?
Problème:
Par défaut, si vous activez l'option "Enregistrer pour COM Interop" dans les paramètres de construction, il N'a PAS d'inscrire la bibliothèque de type pour 64-bit.
Solution:
Pour inscrire votre assemblée qui n'est pas dans le GAC sur une machine 64 bits, ouvrir la fenêtre cmd et faire:
Cela permettra d'éliminer "Classe Non Enregistrée" Erreur lors de l'utilisation de C++ natif de l'instancier .NET de l'assemblée comme objet COM.