¿Por qué los archivos DLL de 64 bits van a System32 y DLL de 32 bits a SysWoW64 en Windows de 64 bits?

StackOverflow https://stackoverflow.com/questions/949959

Pregunta

Me gustaría saber cuándo es necesario colocar un archivo bajo

C: \ Windows \ System32 o C:. \ Windows \ SysWOW64, en un sistema Windows de 64 bits de

I tenía dos DLL de, uno para 32 bits, uno para 64 bits.

Como es lógico, pensé que tendría que incluir la DLL de 32 bits en C: \ Windows \ System32, y la DLL de 64 bits en C:. \ Windows \ SysWOW64

Para mi sorpresa, que es al revés ! La 32 -BIT uno entra en C: \ Windows \ SYSWOW 64 y el 64 DLL bits entra en C: \ Windows \ System 32 .

Cosas muy confuso. ¿Cuál es la razón detrás de esto?

¿Fue útil?

Solución

Creo que la intención era cambiar el nombre de System32, pero tantas aplicaciones modificable por ese camino, que no era factible para eliminarlo.

SysWoW64 no estaba destinado a las DLL de sistemas de 64 bits, en realidad es algo así como "Windows en Windows64", es decir, los bits que necesita para ejecutar aplicaciones de 32 bits en Windows de 64 bits.

en este artículo se explica un poco :

"Windows de 64 bits tiene un directorio System32 que contiene archivos DLL de 64 bits procesos Por lo tanto nativos con un valor de bits de 64 find (sic).‘Sus’DLL donde se lo espera:. En la carpeta System32 Un segundo directorio, SysWOW64, contiene los archivos DLL de 32 bits. el redirector sistema de archivos hace la magia de ocultar la verdadera directorio System32 para los procesos de 32 bits y mostrando SysWOW64 bajo el nombre de System32 ".

Edit: Si usted está hablando de un instalador, que realmente no debe código el camino hacia la carpeta del sistema. En su lugar, deje que Windows cuidar de él para usted en función de si o no el instalador se ejecuta en la capa de emulación.

Otros consejos

Debería añadir: No se le debe poner sus DLL en \ system32 \ modos! Modificar el código, modificar su instalador ... encontrar un hogar para los bits que no es cualquier lugar en c: \ windows \

Por ejemplo, el instalador pone sus archivos DLL en:

\program files\<your app dir>\

or

\program files\common files\<your app name>\

( Nota: La forma en que lo hacen realmente es utilizar el medio ambiente var:% ProgramFiles% o % ProgramFiles (x86)% para encontrar donde Archivos de programa es .... no asumir que es c: \ archivos de programa \ ....)

y luego establece una etiqueta de registro:

HKLM\software\<your app name>
-- dllLocation

El código que utiliza archivos DLL lee el registro, a continuación, vincula dinámicamente a las DLL en ese lugar.

Lo anterior es la forma inteligente de ir.

No siempre instalar archivos DLL o DLL de terceros en \ system32 \ o \ syswow64. Si usted tiene que cargar estáticamente, que poner sus archivos DLL en el directorio exe (donde se encuentran). Si no se puede predecir la dir exe (por ejemplo algún otro exe va a llamar a su DLL), puede que tenga que poner su dir DLL en la ruta de búsqueda (evitar esto si es pos!)

system32 y syswow64 son para Windows proporciona archivos ... No es para aquellos archivos vigilara . La única razón por la gente adquirido la mala costumbre de poner cosas allí se debe a que siempre está en la ruta de búsqueda, y muchas de las aplicaciones / módulos utilizar la vinculación estática. (Por lo tanto, si realmente pones a ello, el verdadero pecado es la vinculación estática - esto es un pecado en código nativo y código administrado - siempre siempre siempre enlazar dinámicamente)

encontré con el mismo problema e investigado esto durante unos minutos.

Me enseñaron a utilizar Windows 3.1 y DOS, recordar esos días? Poco después de que trabajé con ordenadores Macintosh estrictamente desde hace algún tiempo, y luego comenzó a balancearse de nuevo a Windows después de comprar una máquina x64 bits.

Hay razones reales detrás de estos cambios (algunos dirían importancia histórica), que son necesarias para que los programadores continúan su trabajo.

mayoría de los cambios se han mencionado anteriormente:

  • Program Files vs Program Files (x86)

    En un principio los archivos 16 / 86bit fueron escritos en, '86' procesadores de Intel.

  • System32 realmente significa System64 (en Windows de 64 bits)

    Cuando los desarrolladores empezaron a trabajar con Windows 7, hubo varios problemas de compatibilidad en otras aplicaciones en las que almacenan.

  • SysWOW64 realmente significa SysWOW32

    En esencia, en la llanura Inglés, significa 'de Windows en Windows dentro de una máquina de 64 bits' . Cada carpeta está indicando donde se encuentran los archivos DLL para aplicaciones que se deseen utilizar.

Aquí hay dos enlaces con toda la información básica que necesita:

Espero que esto aclare las cosas!

System32 de Windows es donde históricamente coloca todos los archivos DLL de 32 bits, y el sistema era para las DLL de 16 bits. Cuando Microsoft creó el sistema operativo de 64 bits, todos los que conozco de espera los archivos a residir bajo System64, pero Microsoft decidió que tenía más sentido de poner los archivos de 64 bits bajo System32. El único razonamiento que he podido encontrar, es que querían que todo lo que era de 32 bits para trabajar en un Windows de 64 bits w / o tener que cambiar nada en los programas - sólo recompilar, y se hace. La forma en que resolvieron este, de modo que las aplicaciones de 32 bits todavía podían correr, era crear un subsistema de Windows de 32 bits llamada Windows32 En Windows64. Como tal, el acrónimo SysWOW64 fue creado por el directorio del sistema del subsistema de 32 bits. El Sys es la abreviatura de Sistema y WOW64 es la abreviatura de Windows32OnWindows64.
Ya que las ventanas 16 ya están separados de los de Windows 32, no había necesidad de un equipo con Windows 16 En Windows 64 equivalencia. Dentro del subsistema de 32 bits, cuando un programa se va a utilizar archivos del directorio system32, consiguen realmente los archivos del directorio SysWOW64. Pero el proceso es defectuoso.

Es un diseño horrible. Y en mi experiencia, he tenido que hacer muchos más cambios para escribir aplicaciones de 64 bits, que simplemente cambiando el directorio System32 para leer System64 habría sido un cambio muy pequeño, y uno que las directivas de pre-compilador están destinadas a manejar.

Otras personas ya han hecho un buen trabajo de explicar este enigma ridiculus ... y creo que Chris Hoffman hizo un trabajo aún mejor aquí: https://www.howtogeek.com/326509/whats-the-difference-between-the- system32-y-syswow64-carpetas-en-ventanas /

Mis dos pensamientos:

  1. Todos cometemos errores estúpidos miopes en la vida. Cuando Microsoft llamaron a su (en el momento) guía Win32 DLL "System32", que tenía sentido en el momento ... que simplemente no tienen en cuenta lo que sucedería si / cuando una (o 128 bits) versión de 64 bits de su sistema operativo obtuve desarrollaron más tarde - y la emisión masiva compatibilidad hacia atrás un nombre de directorio que causaría. La retrospección es siempre 20-20, por lo que no se puede culpar a ellos (demasiado) de tal error. ... Sin embargo ... Cuando Microsoft se desarrollan posteriormente su sistema operativo de 64 bits, incluso con la perspectiva del tiempo, ¿por qué oh por qué iban a hacer no sólo el mismo error exacto miope de nuevo, pero que sea aún peor por el propósito de dar es un nombre tan engañosa?!? ¡¡¡Me avergüenzo de ellos!!! ¿Por lo menos no en realidad el nombre del directorio "SysWin32OnWin64" para evitar la confusión?!? Y lo que sucede cuando se producen eventualmente un sistema operativo 128 bits ... entonces, ¿dónde van a poner su 32 bits, 64 bits y 128 bits DLL?!?

  2. Todo esto lógica todavía parece totalmente viciado a mí. En las versiones de 32 bits de Windows, System32 contiene DLL de 32 bits; en versiones de 64 bits de Windows, System32 contiene archivos DLL de 64 bits ... para que los desarrolladores no tendrían que hacer cambios en el código, ¿correcto? El problema con esta lógica es que los desarrolladores están haciendo, ya sea ahora aplicaciones de 64 bits necesidad DLL de 64 bits o que están haciendo aplicaciones de 32 bits que necesitan DLL de 32 bits ... de cualquier manera, no están todavía atornillan? Es decir, si todavía están haciendo una aplicación de 32 bits, por lo que ahora se ejecuta en un Windows de 64 bits, que ahora tendrá que hacer un cambio de código para encontrar / hacer referencia al mismo ol' DLL de 32 bits que utilizado antes (ahora situada en SysWOW64). O, si están trabajando en una aplicación de 64 bits, que van a tener que volver a escribir su antigua aplicación para el nuevo sistema operativo de todos modos ... así que una recompilación / reconstrucción iba a ser necesario de todos modos !!!

Microsoft sólo me duele a veces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top