Windows中的文件双击的时候,如果有程序关联了该文件的扩展名,那么就会用关联的程序打开该文件。那么它内部是怎么实现的呢?今天我给大家简单讲一下。

 

一切都在注册表

所有注册了的扩展名都在Windows的注册表中,它的键值位于:

HKEY_CLASSES_ROOT

如下图,可以看到有很多的注册表键值:

Windows沙拉:文件关联的实现原理

 

我们看一下.txt的键值:

Windows沙拉:文件关联的实现原理

 

比较奇怪的是这里没有发现有哪个键值写了用什么程序来打开它。

奥秘就在于.txt的默认值,请看一下.txt的默认值:

Windows沙拉:文件关联的实现原理

 

.txt 的默认值是:

txtfile

那这个txtfile是什么东西呢?其实txtfile也是一个位于HKEY_CLASSES_ROOT下的键值,它的路径是:

HKEY_CLASSES_ROOT\txtfile

那就看下txtfile是什么东西:

Windows沙拉:文件关联的实现原理


看上图,大家注意到了没有,这里有一个shell\open\command的子条目,再打开这个条目看看:

Windows沙拉:文件关联的实现原理

 

看到了没,notepad.exe就是“记事本”,后面的%1 一般用来传递被打开的文件路径。

我找到这里,就猜想,这个就是默认的打开程序。

 

实践验证

上面是猜想,还需要验证一下。

我新建了一个.test的扩展名,把该类型注册为testfile。

Windows沙拉:文件关联的实现原理

 

再新建一个testfile条目:

Windows沙拉:文件关联的实现原理

测试一下:

Windows沙拉:文件关联的实现原理


 

总结

 

Windows沙拉:文件关联的实现原理

 

首先,Windows在注册表中查找对应的扩展名有无注册,有注册就读取该扩展名对应的文件类型,找到文件类型再从中读取关联的程序,从而调用该程序来打开。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-16
  • 2021-09-23
  • 2022-12-23
  • 2021-11-05
  • 2021-07-12
猜你喜欢
  • 2021-11-08
  • 2021-11-22
  • 2022-12-23
  • 2021-05-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案