Je voudrais savoir quand devons-nous placer un fichier sous
C: \ Windows \ System32 ou C: \ Windows \ SysWOW64, sur un système Windows 64 bits.
J'avais deux DLL, une pour 32 bits, une pour 64 bits.
Logiquement, je pensais placer la DLL 32 bits sous C: \ Windows \ System32 et la DLL 64 bits sous C: \ Windows \ SysWOW64.
À ma grande surprise, c'est l'inverse ! Celui 32 bits va dans C: \ Windows \ SysWOW 64 , et la DLL 64 bits va dans C: \ Windows \ System 32 .
Des trucs très déroutants. Quelle est la raison derrière cela?
dll
32bit-64bit
system32
syswow64
Ganesh Astroved
la source
la source
Réponses:
Je crois que l'intention était de renommer System32, mais tellement d'applications codées en dur pour ce chemin, qu'il n'était pas possible de le supprimer.
SysWoW64 n'était pas destiné aux DLL des systèmes 64 bits, c'est en fait quelque chose comme "Windows sur Windows64", ce qui signifie les bits dont vous avez besoin pour exécuter des applications 32 bits sur des fenêtres 64 bits.
Cet article explique un peu:
"Windows x64 possède un répertoire System32 qui contient des DLL 64 bits (sic!). Ainsi, les processus natifs avec un bit de 64 trouvent" leurs "DLL là où ils les attendent: dans le dossier System32. Un deuxième répertoire, SysWOW64, contient les 32 DLL de bits. Le redirecteur du système de fichiers fait la magie de masquer le véritable répertoire System32 pour les processus 32 bits et d'afficher SysWOW64 sous le nom de System32. "
Edit: Si vous parlez d'un programme d'installation, vous ne devriez vraiment pas coder en dur le chemin d'accès au dossier système. Au lieu de cela, laissez Windows s'en occuper pour vous selon que votre programme d'installation s'exécute ou non sur la couche d'émulation.
la source
SysWOW64
dossier, pourquoi ne pourrait-il pas plutôt détecter une application 64 bits et rediriger vers unSystem64
?!Je devrais ajouter: vous ne devriez pas mettre vos DLL dans \ system32 \ de toute façon! Modifiez votre code, modifiez votre installateur ... trouvez une maison pour vos bits qui n'est PAS n'importe où sous c: \ windows \
Par exemple, votre programme d'installation place vos DLL dans:
( Remarque : La façon dont vous effectuez cette opération consiste à utiliser l'environnement var:% ProgramFiles% ou% ProgramFiles (x86)% pour trouver où se trouvent Program Files .... vous ne supposez pas qu'il s'agit de c: \ program files \ .. ..)
puis définit une balise de registre:
Le code qui utilise vos DLL lit le registre, puis établit un lien dynamique vers les DLL à cet emplacement.
Ce qui précède est la façon intelligente de procéder.
Vous n'installez jamais vos DLL ou des DLL tierces dans \ system32 \ ou \ syswow64. Si vous devez charger statiquement, vous mettez vos dlls dans votre répertoire exe (où ils seront trouvés). Si vous ne pouvez pas prédire le répertoire exe (par exemple, un autre exe va appeler votre dll), vous devrez peut-être mettre votre répertoire dll dans le chemin de recherche (évitez-le si possible!)
system32 et syswow64 sont pour les fichiers fournis par Windows ... pas pour les fichiers de quiconque . La seule raison pour laquelle les gens ont pris la mauvaise habitude de mettre des choses là-dedans, c'est parce qu'elles sont toujours dans le chemin de recherche, et de nombreuses applications / modules utilisent des liens statiques. (Donc, si vous y arrivez vraiment, le vrai péché est la liaison statique - c'est un péché dans le code natif et le code managé - toujours toujours toujours dynamiquement!)
la source
Ran dans le même problème et fait des recherches pendant quelques minutes.
On m'a appris à utiliser Windows 3.1 et DOS, vous vous souvenez de ces jours? Peu de temps après avoir travaillé strictement avec les ordinateurs Macintosh, j'ai ensuite recommencé à basculer vers Windows après avoir acheté une machine x64 bits.
Il y a des raisons réelles derrière ces changements (certains diraient une signification historique), qui sont nécessaires pour que les programmeurs continuent leur travail.
La plupart des changements sont mentionnés ci-dessus:
Program Files
contreProgram Files (x86)
Au début, les fichiers 16 / 86bit étaient écrits sur des processeurs Intel «86».
System32
signifie vraimentSystem64
(sur Windows 64 bits)Lorsque les développeurs ont commencé à travailler avec Windows7, il y avait plusieurs problèmes de compatibilité là où d'autres applications étaient stockées.
SysWOW64
signifie vraimentSysWOW32
Essentiellement, en anglais simple, cela signifie «Windows sur Windows dans une machine 64 bits» . Chaque dossier indique où se trouvent les DLL pour les applications qu'ils souhaitent utiliser.
Voici deux liens avec toutes les informations de base dont vous avez besoin:
Redirection de système de fichiers MSDN
Explication de SysWow64
Espérons que cela arrange les choses!
la source
System32 est l'endroit où Windows a historiquement placé toutes les DLL 32 bits, et System était pour les DLL 16 bits. Lorsque Microsoft a créé le système d'exploitation 64 bits, tous ceux que je connais s'attendaient à ce que les fichiers résident sous System64, mais Microsoft a décidé qu'il était plus logique de placer les fichiers 64 bits sous System32. Le seul raisonnement que j'ai pu trouver, c'est qu'ils voulaient que tout ce qui était 32 bits fonctionne dans un Windows 64 bits sans avoir à changer quoi que ce soit dans les programmes - juste recompiler, et c'est fait. La façon dont ils ont résolu ce problème, afin que les applications 32 bits puissent toujours fonctionner, a été de créer un sous-système Windows 32 bits appelé Windows32 sur Windows64. En tant que tel, l'acronyme SysWOW64 a été créé pour le répertoire système du sous-système 32 bits. Le Sys est l'abréviation de System et WOW64 est l'abréviation de Windows32OnWindows64.
Étant donné que Windows 16 est déjà séparé de Windows 32, il n'était pas nécessaire d'avoir une équivalence Windows 16 sur Windows 64. Dans le sous-système 32 bits, lorsqu'un programme utilise des fichiers du répertoire system32, il obtient en fait les fichiers du répertoire SysWOW64. Mais le processus est défectueux.
C'est un design horrible. Et d'après mon expérience, j'ai dû faire beaucoup plus de changements pour écrire des applications 64 bits, que changer simplement le répertoire System32 pour lire System64 aurait été un très petit changement, et que les directives de précompilateur sont censées gérer.
la source
D'autres personnes ont déjà bien expliqué cette énigme ridicule ... et je pense que Chris Hoffman a fait un travail encore meilleur ici: https://www.howtogeek.com/326509/whats-the-difference-between-the- system32-and-syswow64-folder-in-windows /
Mes deux pensées:
Nous faisons tous des erreurs stupides à courte vue dans la vie. Lorsque Microsoft a nommé son (à l'époque) répertoire DLL Win32 "System32", cela avait du sens à l'époque ... ils n'ont tout simplement pas pris en considération ce qui se passerait si / quand une version 64 bits (ou 128 bits) de leur système d'exploitation a été développé plus tard - et le problème de compatibilité ascendante massif qu'un tel nom de répertoire causerait. Le recul est toujours de 20 à 20, donc je ne peux pas vraiment les blâmer (trop) pour une telle erreur. ... CEPENDANT ... Quand Microsoft a développé plus tard leur système d'exploitation 64 bits, même avec le recul, pourquoi oh pourquoi feraient-ils non seulement exactement la même erreur à courte vue, mais aggravent encore la situation en donnant à dessein un tel nom trompeur?!? Honte à eux!!! Pourquoi ne pas au moins nommer le répertoire "SysWin32OnWin64" pour éviter toute confusion?! ? Et que se passe-t-il lorsqu'ils finissent par produire un système d'exploitation 128 bits ... alors où vont-ils placer leurs DLL 32 bits, 64 bits et 128 bits?!?
Toute cette logique me semble encore complètement viciée. Sur les versions 32 bits de Windows, System32 contient des DLL 32 bits; sur les versions 64 bits de Windows, System32 contient des DLL 64 bits ... afin que les développeurs n'aient pas à apporter de modifications au code, n'est-ce pas? Le problème avec cette logique est que ces développeurs créent maintenant des applications 64 bits nécessitant des DLL 64 bits ou qu'ils créent des applications 32 bits nécessitant des DLL 32 bits ... de toute façon, ne sont-ils toujours pas vissés? Je veux dire, s'ils font encore une application 32 bits, pour qu'elle fonctionne maintenant sur un Windows 64 bits, ils devront maintenant faire un changement de code pour trouver / référencer la même ancienne DLL 32 bits qu'ils utilisé auparavant (maintenant situé dans SysWOW64). Ou, s'ils travaillent sur une application 64 bits, ils devront de toute façon réécrire leur ancienne application pour le nouveau système d'exploitation ... donc une recompilation / reconstruction allait être nécessaire de toute façon !!
Microsoft me fait parfois mal parfois.
la source