为什么Windows 7会在Program Files(x86)文件夹中安装64位应用程序?我可以改变行为吗?


12

自CTP以来,我一直在使用Windows 7的64位版本,并且在C:\Program Files (x86)文件夹中安装的应用程序遇到了一些问题。无论如何,拥有2个单独的Program Files目录的目的是什么?

我安装的每个程序都已放入该C:\Program Files (x86)文件夹。应用程序是32位还是64位似乎并不重要。为什么不放置64位应用程序C:\Program Files?

有没有办法将默认值C:\Program Files改为?如果我把所有东西都放进去,会乱成一团C:\Program Files吗?

如果确实为64位应用程序提供一个单独的文件夹确实有一些好处,那么似乎更明智的默认设置是将C:\Program Filesx86应用程序使用,并C:\Program Files (x64)为新的64位应用程序创建一个新文件夹。这将有助于保持向后兼容性。我是一名软件开发人员,我的一些项目中包含指向的库的路径引用C:\Program Files。现在,这些引用在将它们放在的Windows 7计算机上已损坏C:\Program Files (x86)。我什至尝试将安装程序中的目标位置更改为C:\Program Files,但是这被忽略了,C:\Program Files (x86)无论如何该应用程序都进入了。

这非常令人沮丧,因为我需要在32位和64位计算机之间共享源代码,而且我不想弄乱一些配置文件,这些文件在不同的计算机上为这些库设置了不同的路径。

编辑有关环境变量的信息:(为简单起见,仅使用默认的英语变量值。)在64位计算机上,%ProgramFiles%将使用,C:\Program Files而全新变量%ProgramFiles(x86)%将为C:\Program Files (x86)。因此,如果您有一个32位程序需要查找将在其下安装的文件夹路径,则需要按顺序检查它是否在32位或64位版本的Windows上运行。知道要使用哪个环境变量。没有考虑这一点而编写的任何32位应用程序都需要进行更新,以便在64位计算机上正常工作。因此,即使使用环境变量,向后兼容性也会被破坏。

此外,%ProgramFiles(x86)%在32位版本的Windows中不存在。如果确实如此,则32位应用程序可以始终使用该环境变量,并且不需要基于它们所运行的操作系统的任何条件逻辑。


6
您是否肯定这些应用程序确实是64位的?在大多数情况下,您会找到仅与64位兼容但实际上是32位应用程序的程序。
— 约翰T

我想知道使用%ProgramFiles%环境变量是否可以解决此问题。不确定如何处理x86 / 64bit差异。
— ceejayoz

Answers:


7

原因很简单,许多较旧的安装程序要么不理解新的文件结构,要么对标准程序文件目录中的所有内容进行划分,或者您正在查看的智能程序中有一些32位组件正在复制到该程序中。

最好的选择是下载一个新程序,例如x64 Winrar,然后查看它的安装位置以排除计算机问题。

至于弄乱东西-可以,但实际上取决于程序,没有一个答案可以解决所有问题...一些只有几个文件的小型紧凑程序应该没有问题,如果您谈论Office ,Adobe或任何其他“套件”或大型程序,它很可能会失败,因为它们具有跨架构的许多共享组件。


因此,Microsoft为什么不将“ C:\ Program Files”设置为32位应用程序的位置,以便那些旧的安装程序不会引起问题。而且,我不太了解为什么需要分隔。他们为什么不能都只进入“ C:\ Program Files”?
— CoderDennis 2010年

两者之所以不能这样做,是因为某些应用程序(尤其是具有共享组件的应用程序)在32位和64位上具有相同名称的文件。至于为什么会这样-我不知道,当时有人可能有一个很好的理由,它只是停留在“要做的事情”上。
— William Hilsum 2010年

4

如果您使用的不是%ProgramFiles%(或CSIDL_PROGRAM_FILES,或.NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))以外的任何东西,总有麻烦,因为自定义安装可以将程序安装在其他卷(例如D)下,而国际安装默认情况下通常具有其他文件夹。

  • 西班牙语Windows :C:\Archivos de Programa、
  • 法文Windows :C:\Programmes、
  • 德文Windows :C:\Programme、
  • 瑞典语Windows: C:\Program

等等


为了保持简单,我在最初的问题中没有提到环境变量。我刚刚添加了一个编辑,指出了使用%ProgramFiles%到底是引起问题的原因。
— CoderDennis

3

请注意,在Windows 7的64位版本下(这也可能也适用于其他较新的OS版本,但是我只能在Win 7 64位上确认这一点),%ProgramFiles%的父位置之间存在差异在资源管理器和DOS中。

在Windows 7下,%ProgramFiles%(和关联的%ProgramFiles(x86)%环境变量)的实际物理文件夹位置已根据英语版本进行了固定;例如,“ C:\ Program Files”和“ C:\ Program Files(x86)”,但在相应的本地化浏览器中显示。

提供一个具体的例子;在瑞典语Windows 7 64位安装中,如果打开资源管理器并查看系统驱动器(通常为C :),则会看到“ Program ”和“ Program(x86) ”文件夹。在地址栏中键入%ProgramFiles%会将您移至“ C:\ Program”。

但是,如果您打开DOS框并键入SET,您将看到%ProgramFiles%的实际值为“ C:\ Program Files”,而不是“ C:\ Program”文件夹显示出来。使用CD和DIR进行进一步的探索,您可以看到它实际上是“ C:\ Program Files”

道理是,如果您通过API使用环境变量或程序,一切仍然可以使用,但是在探索文件系统时请注意这种细微变化!


在波兰语版本中,“ Program Files(x86)”是“ Plikiprogramów(x86)”,而“ Program Files”是……“ Program Files”。波兰文的语法很奇怪。另外,请不要将其称为DOS盒。那里没有DOS。
— kinokijuf 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.