¿Por qué Windows 7 instala aplicaciones de 64 bits en la carpeta Archivos de programa (x86)? ¿Puedo cambiar el comportamiento?

12

He estado usando la versión de 64 bits de Windows 7 desde el CTP y me he encontrado con algunos problemas con las aplicaciones que se instalan en la C:\Program Files (x86)carpeta. ¿Cuál es el propósito de tener 2 directorios de archivos de programa separados de todos modos?

Todos los programas que he instalado han ido a la C:\Program Files (x86)carpeta. No parece importar si la aplicación es de 32 o 64 bits. ¿Por qué no se colocan aplicaciones de 64 bits C:\Program Files?

¿Hay alguna manera de cambiar el valor predeterminado para que sea C:\Program Filesen su lugar? ¿Arruinaría algo si simplemente pongo todo C:\Program Files?

Si de hecho hay algún beneficio en tener una carpeta separada para aplicaciones de 64 bits, parece que el valor predeterminado más sensato hubiera sido usar C:\Program Filespara aplicaciones x86 y crear una nueva C:\Program Files (x64)carpeta para las nuevas aplicaciones de 64 bits. Esto ayudaría a mantener la compatibilidad con versiones anteriores. Trabajo como desarrollador de software y algunos de mis proyectos contienen referencias de ruta a bibliotecas en C:\Program Files. Ahora esas referencias están rotas en la máquina con Windows 7 que las ha colocado C:\Program Files (x86). Incluso intenté cambiar la ubicación de destino en el instalador C:\Program Files, pero eso fue ignorado y la aplicación entró de C:\Program Files (x86)todos modos.

Esto es muy frustrante porque necesito compartir el código fuente entre máquinas de 32 y 64 bits y no quiero tener que meterme con algún archivo de configuración que establece la ruta a estas bibliotecas de manera diferente en diferentes máquinas.

Editar con respecto a las variables de entorno: (Usando solo valores predeterminados en inglés de variables para simplificar). En una máquina de 64 bits %ProgramFiles%será C:\Program Filesmientras que la nueva variable %ProgramFiles(x86)%será C:\Program Files (x86). Entonces, si tiene un programa de 32 bits que necesita encontrar la ruta de la carpeta en la que se instalaría, necesitaría verificar si se estaba ejecutando en una versión de Windows de 32 bits o de 64 bits para poder saber qué variable de entorno usar. Cualquier aplicación de 32 bits que se haya escrito sin esta consideración deberá actualizarse para que funcione correctamente en una máquina de 64 bits. Entonces, incluso usando variables de entorno, la compatibilidad con versiones anteriores está rota.

Además, %ProgramFiles(x86)%no existe en las versiones de Windows de 32 bits. Si lo hiciera, las aplicaciones de 32 bits siempre podrían usar esa variable de entorno y no necesitarían ninguna lógica condicional en función del sistema operativo en el que se ejecutan.

CodificadorDennis
fuente
66
¿Estás seguro de que estas aplicaciones son de 64 bits? En la mayoría de los casos, encontrará programas que solo son compatibles con 64 bits, pero que en realidad son aplicaciones de 32 bits.
John T
Me pregunto si usar la %ProgramFiles%variable de entorno hubiera resuelto esto. No estoy seguro de cómo maneja la diferencia x86 / 64bit.
ceejayoz

Respuestas:

7

La razón de esto es simplemente que muchos instaladores más antiguos no entienden la nueva estructura de archivos y colocan todo en el directorio de archivos de programa estándar o están buscando un programa inteligente que tiene algunos componentes de 32 bits que se están copiando allí.

Su mejor opción es descargar un nuevo programa, como x64 Winrar y ver dónde se instala para descartar un problema con su máquina.

En cuanto a desordenar las cosas, puede, pero realmente depende del programa, no hay una respuesta única para todos ... algunos programas más pequeños y compactos con solo unos pocos archivos no deberían tener ningún problema, mientras que, si habla de Office , Adobe o cualquier otro "conjunto" o programa grande, lo más probable es que falle ya que tienen muchos componentes compartidos que son de arquitectura cruzada.

William Hilsum
fuente
Entonces, ¿por qué Microsoft no convirtió a "C: \ Archivos de programa" en la ubicación de las aplicaciones de 32 bits para que esos viejos instaladores no causen problemas. Además, realmente no entiendo por qué debe haber una separación. ¿Por qué no pueden ir todos a "C: \ Archivos de programa"?
CoderDennis
La razón por la que ambos no pueden es que algunas aplicaciones (especialmente las que tienen componentes compartidos) tienen archivos con el mismo nombre en 32 bits que en 64 bits. En cuanto a por qué es así: no tengo idea, alguien probablemente tuvo una muy buena razón en ese momento y simplemente se ha quedado como "lo que hay que hacer".
William Hilsum
4

Si usa otra cosa que no sea %ProgramFiles%(o CSIDL_PROGRAM_FILES, o .NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)), tiene problemas de todos modos, ya que las instalaciones personalizadas pueden tener programas instalados en otros volúmenes (D: por ejemplo) y las instalaciones internacionales a menudo tienen otras carpetas por defecto.

  • Español de Windows: C:\Archivos de Programa,
  • Francés de Windows: C:\Programmes,
  • Alemán de Windows: C:\Programme,
  • Windows sueco: C:\Program

etc.

Zano
fuente
No mencioné las variables de entorno en mi pregunta original para que sea simple. Acabo de agregar una edición que señala cómo usar %ProgramFiles%es exactamente lo que causa el problema.
CoderDennis
3

Tenga en cuenta que en las versiones de Windows 7 de 64 bits (esto también puede aplicarse a otras versiones más nuevas del sistema operativo, pero solo puedo confirmar esto para Win 7 de 64 bits), existe una diferencia entre la ubicación actual de su% ProgramFiles% en explorador y en DOS.

En Windows 7, la ubicación real de la carpeta física de% ProgramFiles% (y la variable de entorno% ProgramFiles (x86)% asociada) se fija según la versión en inglés ; es decir, "C: \ Archivos de programa" y "C: \ Archivos de programa (x86)" respectivamente, pero se muestra en el explorador localizado según corresponda.

Para proporcionar un ejemplo específico; en una instalación sueca de Windows 7 de 64 bits, si abre el Explorador y busca en la unidad del sistema (normalmente C :) verá las carpetas " Programa " y " Programa (x86) ". Si escribe% ProgramFiles% en la barra de direcciones, pasará a "C: \ Program".

Sin embargo, si abre un cuadro de DOS y escribe SET, verá que el valor real de% ProgramFiles% es "C: \ Archivos de programa", no el explorador de carpetas "C: \ Program" que le muestra. Una exploración adicional con CD y DIR puede verlo físicamente es "C: \ Archivos de programa"

La moraleja es que si usa las variables de entorno o el programa a través de la API, todo funcionará, ¡pero tenga en cuenta este cambio sutil al explorar el sistema de archivos!

Pete Stensønes
fuente
En la versión polaca, "Archivos de programa (x86)" es "Pliki programów (x86)", mientras que "Archivos de programa" es, bueno ... "Archivos de programa". El polaco tiene una gramática extraña. Además, no lo llame un cuadro de DOS. No hay DOS allí.
kinokijuf