右键打开方式
前面我们谈到了扩展名与文件类型的关联,文件类型与开放式命令的关联(也就是文件的打开方式),看起来好象我们关于文件关联的问题就谈完了,实则不然,还有另外的一个重要的方面我们没有谈到。这就是我们右击一个文件,选择打开方式(并不是所有文件右键都有打开方式这个选项的),然后我们选择一个程序,并把“始终使用这种程序打开同类型文件”前的勾选上,点确认。比如本文开头的那位朋友,把所有快捷方式都选择以word程序打开一样。这样之后,这个文件类型也就与这个开放式命令关联起来了。
ftype命令是修改文件类型与开放式命令的关联的,而右键打开方式也可以修改文件类型与开放式命令的关联,这二者的关系是什么呢?
我们发现,ftype命令和右键打开方式,这二者所修改的注册表项是不同的。Ftype命令所修改的注册表项是: HKEY_CLASSES_ROOT\filetype ,这个filetype代表的是文件类型,比如HKEY_CLASSES_ROOT\lnkfile ,而右键打开方式所修改的主要注册表项是: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext ,这个.ext代表的是文件扩展名,比如: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.lnk ,按照我的理解,ftype命令所修改的内容属于系统设置,而右键打开方式所修改的内容则属于用户设置,这二者所设置的实际对象是一样的,当二者不一致的时候,用户设置优先于系统设置。
三个注册表项
总之,文件关联所涉及到的注册表项主要是三个:
HKEY_CLASSES_ROOT\.ext
HKEY_CLASSES_ROOT\filetype
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext
问题解决
现在要回到我们在开头所说到的问题了。我教那位朋友首先输入:assoc .lnk ,返回的命令结果是: .lnk=lnkfile 中,这表明,扩展名.lnk与文件类型lnkfile之间的关联没有问题。 我再要他输入:ftype lnkfile ,返回的命令结果是:没有找到文件类型“lnkfile”或者与其相关的开放式命令,而这个结果是正常的,这表明,系统设置中的lnkfile与开放式命令之间的关联也没有问题。
那么,问题只能出在用户设置中的lnkfile与开放式命令之间的关联出现了问题。 一般的情形下,右键打开方式的设置优先于ftype命令对文件关联的设置,这在xp和win7下都是一样的,但对于扩展名为.lnk的快捷方式,二者却具有不同。在win7下,即便是对于.lnk快捷方式,也是右键打开方式的设置优先于ftype命令的设置。
找到了问题所在,我们就可以知道,对于这种快捷方式的文件关联错误,我们用assoc和ftype命令都是无法解决的。解决的办法就是:
在注册表中右键删除下面这个注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.lnk\UserChoice 这个注册表项下的值和数据(具体就是名为progid的值和它的数据),是对应右键打开方式所设置的默认打开程序的。
在删除后,重启电脑,或者重启explorer,问题完美得到解决。 除了这种解决办法,其它的解决办法暂时没有找到。
顺便说一下,在XP下,UserChoice这个注册表项是没有的。
由于一些文件右键没有打开方式选项,在xp下,我们可以在我的电脑里面点工具----查看----文件夹选项---文件类型,这里我们可以进行同样的设置,而在Win7下,我们可以在----控制面板---程序---默认程序----始终使用指定的程序打开此文类型---里面进行设置,xp下设置的可选项要多得多,而Win7下则的设置则极为简明。