有关用途和位置的最大线索是“大字型”,即相应蜂箱的名称:HKLM和HKCU
在两个配置单元中都设置了文件关联,它们具有两个不同的用途:
顾名思义,HKCU注册表项为CURRENT USER设置文件关联,并覆盖HKLM中的相应文件类型设置。
HKLM为本地机器(即机器的所有用户)设置文件关联(除非被HKCU条目覆盖)。(对于Win98,HKCR只是HKLM \ Software \ Classes的简写别名。它们不是单独的或不同的配置单元。但是,对于Win XP,这已不再适用,不再适用。HKCR现在是合并后的虚拟配置单元HKLM \ Software \ Classes \,HKCU \ Software \ Classes \和HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts键,并且HKCU信息优先。)
这个两步系统不仅促进了一对一的文件关联方案,而且促进了多对一和一对多的文件关联方案。例如,.htm,.html和.shtml文件类型都可以设置为ProgID = htmlfile,从而可以定义一个浏览器。OTOH,条目可以包含OpenWithList或OpenWithProgID子项,以及多个条目,以从多个浏览器,编辑器或其他应用程序的列表中打开文件。
HKLM \ Software \ Classes \和HKCU \ Software \ Classes的操作方式相同(一个优先于另一个)。最简单的形式是文件扩展名(例如HKCR.txt)的注册表项,其默认值为相应的ProgID(例如txtfile)。除了默认值外,或代替默认值,可能还会为“ OpenWithProgID”子项(例如txtfile和htmlfile)列出其他ProgID名称,和/或在“ OpenWithList”下以子项的形式出现其他应用程序名称(例如Notepad ++) .exe,Opera.exe,Firefox.exe)。
每个ProgID在HKCR内的另一个键(例如HKCR \ txtfile)中定义。该键包含一些子键,这些子键告诉窗口使用哪个图标以及如何打开,打印,打印到等相关文件(例如HKCR \ txtfile \ shell \ open \ command)。同样,每个应用程序名称都被定义为HKCR \ Applications下的子项(例如,HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command)。
除了HKCU \ Software \ Classes项之外,在HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts项中还可以找到用户帐户文件关联。这些条目不仅建议用于Windows资源管理器,而且是用户帐户文件关联替代的其他来源。这些条目是由资源管理器中的文件关联工具(资源管理器\工具\文件夹选项\文件类型)创建的,并且包含每个列出的文件扩展名的OpenWithList和/或OpenwithProgID子项。
若要确定文件关联,Windows首先在HKCU条目中查找相应的文件扩展名。只有找不到一个,HKLM条目才会起作用。(注意:我尚未测试哪个优先级-HKCU \ Software \ Classes或HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts,但我怀疑这将是FileExts密钥)。同样,如果在HKCU中找不到引用的ProgID或应用程序名称,则会搜索HKLM条目。(请注意,\ Applications \条目只是任意名称-尽管它们通常与磁盘exe文件的实际名称相同。)
因此,要为特定用户帐户定义文件关联,请在HKCU配置单元中创建条目。若要为所有用户定义关联,请在HKLM配置单元(HKCR)中创建条目,然后删除HKCU配置单元中对该文件类型的所有引用。显然,您需要对注册表项具有适当的访问权限。
我不使用assoc和ftype工具,因为我更喜欢在交互式或批处理模式下使用RegEdit,但是从其他注释中可以看出,它们仅在HKLM配置单元上运行,对于清除/设置HKCU键没有用。花一些时间并使用RegEdit浏览上述键,以查看更多示例。