Windows沙拉:文件关联的实现原理
Windows中的文件双击的时候,如果有程序关联了该文件的扩展名,那么就会用关联的程序打开该文件。那么它内部是怎么实现的呢?今天我给大家简单讲一下。
一切都在注册表
所有注册了的扩展名都在Windows的注册表中,它的键值位于:
HKEY_CLASSES_ROOT
如下图,可以看到有很多的注册表键值:
我们看一下.txt的键值:
比较奇怪的是这里没有发现有哪个键值写了用什么程序来打开它。
奥秘就在于.txt的默认值,请看一下.txt的默认值:
.txt 的默认值是:
txtfile
那这个txtfile是什么东西呢?其实txtfile也是一个位于HKEY_CLASSES_ROOT下的键值,它的路径是:
HKEY_CLASSES_ROOT\txtfile
那就看下txtfile是什么东西:
看上图,大家注意到了没有,这里有一个shell\open\command的子条目,再打开这个条目看看:
看到了没,notepad.exe就是“记事本”,后面的%1 一般用来传递被打开的文件路径。
我找到这里,就猜想,这个就是默认的打开程序。
实践验证
上面是猜想,还需要验证一下。
我新建了一个.test的扩展名,把该类型注册为testfile。
再新建一个testfile条目:
测试一下:
总结
首先,Windows在注册表中查找对应的扩展名有无注册,有注册就读取该扩展名对应的文件类型,找到文件类型再从中读取关联的程序,从而调用该程序来打开。
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名和链接(http://greenerycn.cnblogs.com).
如果觉得文章有用,愿意的话赞助一杯饮料吧,谢谢。
![]() |
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述