为什么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.