久病成名医。在经历了电脑最近的备份、崩溃和恢复后,我对朝夕相处的Windows又多了几分了解。Windows 7是Windows XP之后微软最成功的操作系统,也是之后Windows 8和10的基础,因此本文介绍的内容都以Windows 7为环境。
Windows用户最熟悉的程序安装路径是C盘下的Program Files。在64位操作系统下,多出来了一个区分32位程序的Program Files (x86) 文件夹。许多用户为了防止操作系统重装时程序丢失,将软件都安装在d盘或其他硬盘分区中。无需安装的硬盘版(绿色)和程序员普遍使用的虚拟机加编译或源代码形式的工具,则直接保存在下载文件夹或同一个硬盘的其他目录下。以上大概就是普通Windows用户安装程序的几种情况。
新的软件打破了惯例。我们会注意到谷歌浏览器(以下简称Chrome)和其他一些软件既不允许用户选择安装路径,也没有安装到Program Files目录下,而是在C:\Users\[当前用户名]\AppData\Local路径下创建了专用的文件夹。要理解这些软件为什么被设计成如此行为,必须理解Windows中上述文件夹的作用。
首先AppData与下面提到的ProgramData都是隐藏的文件夹,要通过下列操作才能看到:
- 打开文件管理器(即开始菜单中选择计算机),在工具栏的“组织”下拉列表中,单击“文件夹和搜索选项”,显示文件夹选项对话框。
- 选中“查看”选项卡。
- 在高级设置的“隐藏文件和文件夹”条目下,选择“显示隐藏的文件文件夹和驱动器”。确定并关闭文件夹选项对话框。
ProgramData与AppData文件夹的含义与区别
这时在C盘下将能看到与Program Files并列的ProgramData文件夹。顾名思义,ProgramData文件夹就是用来保存各个程序的数据的,如配置、缓存和临时文件,其下建立了对应各个程序的子文件夹。
C盘下还有一个Users文件夹,当前计算机的所有账号都有一个同名的子文件夹于其中,此外还有名为Public和Guest这两个对应特殊账号的文件夹,这些文件夹中存放的是对应账号的环境和配置信息。每个账号的文件夹下,有一个名为AppData的隐藏子文件夹,其中存放的也是各个程序的数据,它与ProgramData的区别在于,ProgramData保存的是与账号无关的数据,也就是对一个程序的所有用户都相同的数据,例如一个画图软件的帮助文件;AppData保存的是特定于某个账号的数据,例如各个用户所画的图片文件。
Local、Locallow和Roaming文件夹的含义与区别
在AppData文件夹下,又存在Local、Locallow和Roaming三个子文件夹,它们是为企业、组织等多计算机多用户的环境而设置的。在这样的环境中,多个用户可能共享一台计算机,一名用户能够使用不同的计算机,用户登录的不是单台计算机,而是多台计算机组成的域。当一名用户使用不同的计算机时,他希望计算机看起来是一样的、使用习惯是一致的,这就要求前面所说的某个账号的环境和配置信息能够在计算机之间漫游(Roam)。Windows的做法是,用户登录到域服务器时,服务器将他的账号信息传输到他所用的计算机,保存在Roaming文件夹内;等到用户登出时,有可能更改过的Roaming文件夹内最新的账号信息又被上传回服务器。与之对应,Local文件夹内保存的则是仅仅存放于本机的账号信息,这些信息不必漫游,或者由于体积太大,不方便漫游,如浏览器的缓存。Locallow用于保存低级别的本机账号数据,现已很少使用。
对于家庭使用的个人计算机,不存在漫游的需要和可能性,账号信息基本上都保存在Local文件夹内。
Chrome为什么要安装在C:\Users\[当前用户名]\AppData\Local\Google\Chrome路径下?
既然一台计算机允许有多个账号访问,就存在账号权限的问题。上面提到Users路径下各个文件夹保存的是对应账号的数据。不同的账号不仅需要有分隔的位置以存放其数据,还必须控制数据的访问权限——每个账号只有权访问自己的数据。表现在Windows的存取控制列表上,就是每个账号的文件夹只有该账号和管理员、系统等特殊账号有权访问。再来看Program Files文件夹,管理员和系统等账号对该文件夹及其中的内容有完全权限,即可以读、写、修改、删除、列出文件夹内容、运行程序等等;普通账号只能读、列出文件夹内容和运行程序。换言之,只有管理员的特殊账号能够将程序安装于该文件夹内,普通账号可以使用这些程序,但不能安装、修改或删除。
在家用电脑上,我们都是以管理员账号登录,在很多情况下管理员甚至是唯一的个人身份账号,并且无需输入密码就登录。因此我们意识不到多账号和权限的问题,在Program Files或任何其他文件夹下安装、修改和删除程序都被视为理所当然。
在多用户通过不同账号访问一台计算机的环境中,权限的问题就会浮现出来。首先是普通账号没有权限在Program Files文件夹中安装程序。其次是即使管理员在该文件夹中安装好了供大家使用的程序,普通账号也无法进行更新。而我们知道Chrome是一款更新频繁的浏览器,为了确保任何账号使用计算机时都有权安装和更新、每个账号的浏览器都对其他账号透明从而免去浏览时的疑问和维护时的冲突,Google便强制将Chrome的程序和数据一道安装在C:\Users\[当前用户名]\AppData\Local\Google\Chrome路径下。因为AppData文件夹的本意是保存特定于某个账号的数据而非程序,才使得这一做法看上去有些奇怪。假如Users文件夹本来就被设计成不仅保存数据,也用于存放属于不同账号的程序,Chrome的做法就显得正常了。