Windows 在注册表中的什么位置存储了使用哪个程序来打开某些文件类型?

Windows 在注册表中的什么位置存储了使用哪个程序来打开某些文件类型?

安装 Adob​​e PDF 阅读器后,它会打开带有.PDF文件扩展名的文件。默认的 Web 浏览器会打开.html文件,记事本会打开.txt文件等。

这些文件类型 - 程序关联究竟存储在注册表中的什么位置?

换句话说,Windows 如何知道必须使用哪个软件/程序打开某个文件(类型)?

答案1

打开用关联全部存储在 中HKEY_CLASSES_ROOT

这是一个特殊的注册表配置单元,它将 中的本地用户关联HKEY_CURRENT_USER\Software\Classes与 中的系统关联结合在一起HKEY_LOCAL_MACHINE\Software\Classes

以下是您在问题中提到的 PDF 关联的注册表截图:

注册表中的 PDF 文件关联

答案2

只是为了扩展 Gareth 的回答:

从注册表来看

  • 来自 的条目HKEY_CURRENT_USER\Software\Classes覆盖来自的条目HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CLASSES_ROOT\Software\Classes
  • assoc使用命令从命令行设置文件的扩展名关联HKEY_LOCAL_MACHINE\Software\Classes
  • ftype使用命令从命令行设置文件类型关联HKEY_LOCAL_MACHINE\Software\Classes

答案3

对于当前的 Windows 版本,

#1 首先你需要查找HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[EXT]\UserChoice\ProgId是否存在。如果不存在,转到#5。

#2 ProgId 是一个文件类,例如Python.File(=> 转到 #6) 或者类似的应用程序 ID,例如Applications\SciTE.exe(=> 转到 #3)

#3 找到应用程序 id,Applications\SciTE.exe例如HKEY_CLASSES_ROOT\Applications\SciTE.exe\shell\open\command。默认值是要运行的命令。

#4 完成。

#5 LookupComputer\HKEY_CLASSES_ROOT\[EXT]的文件类的默认值,例如Python.File

#6 查找文件类,Python.FileHKEY_CLASSES_ROOT\Python.File\shell。默认值是默认命令,例如(如果不存在则edit默认为)。open

#7 查找其edit命令,如HKEY_CLASSES_ROOT\Python.File\shell\edit\command。默认值是要运行的命令。注意:右键单击文件时,资源管理器中会显示文件类的其他可用命令。

注意:HKEY_CLASSES_ROOT连接(更高优先Software\ClassesHKEY_CURRENT_USER)和HKEY_LOCAL_MACHINE

答案4

这些方法的问题是 Windows 无法真正处理不同可执行文件具有相同名称的可能性。使用 GUI 时,无法知道它们指的是哪一个。

这是因为,无论如何在 Win 7 中(我还没有检查过 Win 10),explorer 的默认程序存储在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\ 但如果你在那里查看,你会发现例如在 OpenWithList 键中,就像LibreOfficeWriterPortable.exe我的情况一样。但我有该程序的多个版本,所有版本都具有相同的名称,因此更改该键不会有帮助。

要找到它实际指向的内容,你必须转到(就我而言)

HKEY_USERS\S-1-5-21-966747605-1980359026-2421819745-1000\Software\Classes\Applications\LibreOfficeWriterPortable.exe\shell\open\command

找出实际上会打开的内容,即他们使用的名称实际上指向什么。

相关内容