180 votos

¿Por qué Windows de 64 bits necesita separar "Archivos de Programa (x86)" carpeta?

Sé que en una versión de 64 bits de Windows la carpeta Archivos de Programa es para programas de 64 bits y los "Archivos de Programa (x86)" carpeta es para programas de 32 bits, pero ¿por qué esto es incluso necesario?

Por "necesario", no me refiero a "¿por qué Microsoft no ha hecho ninguna otra de las decisiones de diseño?" porque, por supuesto, que podrían tener. Más bien, quiero decir, "¿por qué, dado el actual diseño de la versión de 64 bits de Windows, debe de programas de 32 bits tienen un nivel superior de la carpeta de programas de 64 bits?" Dicho de otra manera, "¿qué podría ir mal si me evitado de alguna manera el mecanismo de redirección y obligó a todo para que se instale en el real C:\Program Files\?"

Hay un montón de preguntas sobre el Super Usuario y otros que afirman que "uno es para programas de 32 bits, uno es para programas de 64 bits", pero ninguno que yo pueda encontrar a dar la razón. Desde mi experiencia, que no se parecen a la cuestión de si un programa de 32 bits instalado en el lugar correcto o no.

Hace Windows de alguna manera se presenta de manera diferente a un programa que se ejecuta fuera de "Archivos de Programa (x86)"? Hay una descripción que muestra exactamente lo que es diferente para un programa que se instala en "Archivos de Programa (x86)" en lugar de "Archivos de Programa"? Creo que es poco probable que Microsoft iba a introducir una nueva carpeta sin una legítima razón técnica.

93voto

David Schwartz Puntos 42148

Respuesta corta: Para asegurar el legado de 32 bits, las aplicaciones siguen funcionando de la misma manera que lo hacían antes, sin imponer feo normas sobre aplicaciones de 64 bits que podría crear un permanente desorden.

No es necesario. Es más conveniente que otras posibles soluciones, como la que requiere cada aplicación para crear su propia manera de separar de 32-bit Dll y ejecutables de 64 bits Dll y ejecutables.

La razón principal es hacer que las aplicaciones de 32 bits que no sé ni sistemas de 64 bits, existe "sólo trabajo", incluso si es de 64 bits Dll se instalan en los lugares de las aplicaciones. Una aplicación de 32 bits no será capaz de cargar una DLL de 64 bits, por lo que un método se necesita para asegurarse de que una aplicación de 32 bits (que puede pre-fecha de sistemas de 64 bits y por lo tanto no tienen idea de archivos de 64 bits siquiera existe), no iba a encontrar una DLL de 64 bits, intente cargar, no, y, a continuación, generar un mensaje de error.

La solución más sencilla para esto es consistente directorios separados. Realmente la única alternativa es la de exigir a cada aplicación de 64 bits para "ocultar" sus archivos ejecutables en algún lugar de una aplicación de 32 bits no se vería, tales como bin64 directorio dentro de esa aplicación. Pero que impondría permanente fealdad en sistemas de 64 bits para apoyar a las aplicaciones heredadas.

68voto

OGP Puntos 101

Permite instalar el de 32 bits y la versión de 64 bits de una aplicación sin sobrescribir sí mismo.


Después de ver esta respuesta y el hilo de comentarios al día siguiente, me doy cuenta de una posible mayor supervisión en mi respuesta. Yo falsamente supone un fondo de programación y cuando estaba hablando de usted en mis comentarios, no me refiero a los usuarios, pero el programador.

Yo no trabajo para Microsoft y no tengo ni idea de cuál es la verdadera razón detrás de estas carpetas es, pero creo que la razón de estas carpetas es tan obvio que no tengo ningún problema con el argumento de que es.

Así que vamos a romper!

  1. Las carpetas son impresionantes!

    Vamos a estar de acuerdo en algo. Las carpetas son grandes! No los necesitamos, tenemos suficiente posibles nombres de archivo para poner cada archivo en la root de su disco duro, entonces, ¿por qué carpetas?

    Bien, nos ayuda a ordenar nuestras cosas. Y ordenar cosas es genial. Nos ayuda a procesar las cosas más fácilmente. Esto es especialmente útil cuando se trabaja con una máquina que requiere la estructura.

  2. Separación de los datos y la lógica es genial!!!

    Un paradigma a menudo se encuentran en la programación, es separar los datos de la lógica. Quieres que una parte de que sabe cómo hacer algo y quiere otra parte usted puede hacer algo con el.

    Esto también se encuentra en el sistema de archivos.

    Tenemos las carpetas de la aplicación (lógica) y las carpetas para nuestros objetos de valor (datos):

    La lógica

    • %WINDIR%
    • %PROGRAMFILES%
    • %PROGRAMFILES(x86)%

    Datos

    • %PROGRAMDATA%
    • %HOMEDRIVE%%HOMEPATH%

    Así, parece que las carpetas son impresionantes y tiene sentido poner los programas en su propia carpeta. Pero ¿por qué tener 2? Por qué no dejar que el instalador que manejar y poner todo en una Programs carpeta?

  3. Los instaladores no son mágicos

    Hoy en día, a menudo utilizamos pequeños programas para instalar nuestros programas más grandes. Llamamos a estos pequeños programas instaladores.

    Los instaladores no son mágicos. Ellos tienen que ser escritas por los programadores y aplicaciones (con posibles errores) como cualquier otra aplicación de allí. Así que echemos un vistazo a la situación de un imaginario programador tendría que enfrentarse con y sin el sistema actual:

    1 carpeta de Archivos de Programa

    El desarrollador mantiene 2 instaladores. Uno para el de 32 bits y otro para la versión de 64 bits de su aplicación. El instalador de 32 bits va a escribir a C:\Program Files\App\ y el instalador de 64bits va a escribir a C:\Program Files\App\sixtyfour\.

    2 carpetas de Archivos de Programa

    El desarrollador mantiene 1 instalador. El instalador siempre escribir a %PROGRAMFILES% y dependen del sistema operativo para expandir la ruta correspondiente (que en realidad no usar variables de entorno para estos casos, usted tendría que utilizar SHGetKnownFolderPath con FOLDERID_ProgramFiles para recuperar la ruta de acceso correcta).
    Todo encuentra su lugar automáticamente y el patrón es idéntico con todas las aplicaciones instaladas.

  4. La consistencia tiene sentido

    Cuando usted aprender algo, que por lo general implica que el comportamiento observado fue constante. De lo contrario, realmente no hay nada que observar y aprender.

    Lo mismo es cierto para nuestro pequeño sistema de archivos. Tiene sentido poner siempre las mismas cosas en las mismas carpetas. De esa manera, vamos a saber dónde mirar cuando estamos buscando algo.

    El sistema de 32/64 aplicación distinción promueve este objetivo. Las aplicaciones se dividen en 2 lugares, para evitar conflictos de nombres, binario comportamiento de carga y de seguridad (hasta cierto punto).

Yo todavía no lo entiendo. Esto parece inútil

Nunca debe olvidarse de una cosa. Las personas son increíblemente estúpido. Esto incluye a los usuarios, los super usuarios y especialmente a los programadores.

Esta es la razón por la que necesitamos cosas como el sistema de archivo de redirección para incluso hacer que nuestros sistemas utilizables.

Los programadores se acaba de ir allí y tratar de carga C:\Windows\system32\awesome.dll y no preocuparse de si se está ejecutando una versión de 32 o de 64 bits del sistema. Iban a tratar de cargar la DLL de 64 bits y simplemente accidente. Algunos programadores que desee utilizar alguna Oficina de DLL, no hay problema, ellos saben donde encontrarlo! C:\Program Files\Microsoft\Office\14.0\wizards.dll... y otro crash!

Todas estas peticiones por aplicación de 32 bits son redirigidos a la de 32 bits contrapartes para evitar la aplicación se bloquea.

Necesitamos algunos fijos nombres de carpeta para construir un sistema. Si no hay ninguna carpeta de la estructura de apoyo para esta redirección, entonces ¿cómo vas a hacer que funcione?

Vale, ahora lo entiendo. Pero, ¿por qué no usar C:\Program Files\x86\ ?

Ahora estamos recibiendo filosófico...

¿Qué podría ir mal si me evitado de alguna manera el mecanismo de redirección y obligó a todo para que se instale en el real C:\Program Files\?

Más probable es que nada (como mucho como otras aplicaciones no dependen de una ubicación fija para esa aplicación).

El WOW64 mecanismo de ganchos en CreateProcess y realizará más sofisticados (más sofisticado que la comprobación de la carpeta nombre del archivo ejecutable) los controles sobre la imagen ejecutable para determinar si es de 32 o 64 bits.

Sí, pero me refiero a que, como TODAS las aplicaciones!

  • ¿Qué pasaría si pongo tanto diesel y de gasolina en mi coche?
  • ¿Qué pasaría si intento utilizar tanto de corriente continua y alterna en la misma línea?
  • ¿Qué pasaría si sigo tanto a mi gato y mis peces en el mismo acuario?

Algunas de las preguntas que no requieren de respuestas. No es la intención de hacer, no lo hagas. No se gana nada aquí. La cantidad de problemas que tal cambio podría causar va siempre superan a los posibles beneficios que alguien podría ver en esto.

14voto

Ben Collins Puntos 11318

TL;DR:

Para resumir, no, no es necesario; se podría haber usado una sola carpeta, y no, Windows no se presenta de manera diferente a un programa que está en ejecución desde una ubicación u otra.


Bueno, todo el mundo parece estar lanzando en sus opiniones acerca de esto, así que me voy a tirar en mi 2¢. Otros ya han conjeturado sobre las razones de por qué Microsoft decidió crear diferentes carpetas de nivel superior para 32-bit y 64-bit versiones de los programas, así que voy a dejar esa parte (la mejor razón fue la de David explicación de que es como una conveniencia para los programadores). Por supuesto, incluso entonces, no muy a la dirección de la pregunta directa ¿por qué esto es incluso necesario?, para que la respuesta es de suponer: no.

En su lugar, voy a abordar el cuerpo principal de la pregunta

Hace Windows de alguna manera se presenta de manera diferente a un programa que se ejecuta fuera de "Archivos de Programa (x86)"?

En realidad no, pero la ubicación del programa pueden afectar el comportamiento, pero no en la forma en que usted piensa.

Cuando se ejecuta un programa, Windows crea un entorno en el que lo ejecute (me refiero en términos de memoria, direccionamiento, etc., no sólo las variables de entorno). Este entorno depende del contenido del archivo ejecutable (32-bit y 64-bit programas se diferencian internamente). Cuando se ejecuta un programa de 32 bits en un sistema de 64 bits, que se ejecuta en el subsistema de 32 bits que emula un entorno de 32 bits. Se llama WoW64 (WoW64 stands para Windows en Windows de 64 bits) y es similar al modo de 16 bits, las aplicaciones se ejecutan en windows XP utilizando el NTVDM.

Cuando se ejecuta un programa con o sin privilegios de administrador, que afecta la forma en que se ejecuta, pero la ubicación debe no la afectan (aunque hay algunos ejemplos de ubicación de la dependencia como algunos conductores, por ejemplo).

(Estoy usando un equipo diferente, por lo que no puedo confiar en mi historial del navegador para desandar mis pasos, pero el otro día al responder a esta SU pregunta , terminé en este ASÍ que la pregunta que me hizo Google PROCESSOR_ARCHITEW6432 que conducen a este MODO de pregunta y este blog de Microsoft publicación.)

En algún lugar a lo largo del camino, he leído un StackOverflow post acerca de cómo la envirnoment variable %processor_architecutre% da resultados diferentes dependiendo del lugar donde se ejecute el símbolo de (voy a tratar de encontrar la cita exacta.).

La respuesta resultó ser debido si el de 32 bits o de 64 bits versión de el símbolo del sistema se ejecuta (es decir, de System32\ o SysWoW64\). En otras palabras, mientras que la ubicación parece afectar el comportamiento del programa, es sólo porque hay diferentes versiones del programa, no porque Windows trata la carpeta de una manera especial.

Esto tiene sentido porque el archivo ejecutable del contenido dictan si es de 32 bits o de 64 bits, por lo que podría poner una de 32 bits y de 64 bits copia del mismo programa (por ejemplo, foobar32.exe y foobar64.exe) en la misma carpeta y al ejecutarlos, que va a ser cargado correctamente (la versión de 64 bits se ejecutan de forma nativa y la de 32 bits se ejecutan en el WoW64 capa de emulación).

FreePascal permite instalar DOS y versiones de Windows y que van en la misma carpeta: %programfiles%\FreePascal. Gestiona las diferentes arquitecturas por mantener los archivos ejecutables (.exe, .sys, .dll, .ovr, etc.) en carpetas separadas y recurso para compartir archivos como fotos, la fuente de los archivos, etc.) No hay ninguna razón técnica que esto no podría realizarse también de 32 - y 64-bit versiones de un programa. Como dijo David, es simplemente más fácil para el programador si están separados (es decir, uso de variables para hacer que parezca que sólo hay un conjunto de archivos, etc.)

11voto

Luke Dennis Puntos 4805

Otra razón es que la mayoría de los programas que se utilizan para el uso de las variables ambientales tales como: %PROGRAMFILES% para el punto a donde su programa fue instalado. Para los programas de 64 bit, que se va a la normal. Para la 32 bits de programas, se redireccionará a la nueva Program Files (x86) carpeta.

Aunque, al menos con la nueva .Net cosas en Visual Studio, que ahora tienen la Aplicación.Variable Local que se elimina toda necesidad de este.

9voto

avirk Puntos 11580

Microsoft, la solución a esta transición de 32 bits a 64 bits ha sido agregar legado soporte para la mayoría de las aplicaciones de 32 bits. En otras palabras, la mayoría de las aplicaciones de 32 bits funcionará en el operativo de 64 bits medio ambiente. Tenga en cuenta que otros sistemas operativos que operan en una arquitectura de 64 bits no se puede cargar ni ejecutar aplicaciones de 32 bits.

Para ayudar a facilitar la transición, Microsoft ha indicado que todos los 32 bits de la aplicación, por defecto, ser cargado en los Archivos de Programa (x86) carpeta en lugar de llegar mezclado con cierto aplicaciones de 64 bits en la carpeta de Archivos de Programa.

Fuente

"¿qué podría ir mal si me evitado de alguna manera el mecanismo de redirección y obligó a todo para que se instale en el real C:\Program los Archivos de\?"

Nada. El programa de dos directorios son sólo para la organización, o para mantener los programas que tienen dos versiones de 32-bit y 64-bit versión separada, como Internet Explorer. Pero se puede instalar un programa de 32 bits en "Archivos de Programa" y un programa de 64 bits en "Archivos de Programa x86" y no pasa nada que el programa se ejecute el mismo.

Wiki dice:

Algunos instaladores de la aplicación rechazar espacios dentro de la ruta de instalación ubicación. Para sistemas de 32 bits, la forma corta del nombre de la carpeta Archivos de Programa es Archiv~1. Para sistemas de 64 bits, el nombre corto para el Programa de 64 bits de los Archivos de la carpeta es Archiv~1 (lo mismo que en los sistemas de 32 bits); mientras que el nombre corto para el de 32 bits en Archivos de Programa (x86) la carpeta ahora Progra~2.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X