ARTICLE · 1054487
当我和豆包抱怨一句百度软件跟流氓一样,就会...
事情是这样的。
前几天装了个百度搭子(DuMate),装完双击一个 .docx,屏幕上愣了一下——怎么打开的是这个 AI 助手,不是我天天用的 WPS。
第一反应不是翻系统设置,是和豆包抱怨了一句:"百度真的跟流氓一样,装个百度搭子,它把我文件的默认打开方式给改了。"
豆包回我:我先查一下它到底抢了哪些。
然后就没有然后了——没有教程,没有"你先去右键点一下打开方式",它直接开始干活。

一堆文件被一只红色触手偷偷改了默认打开方式
● ● ●
一、它到底抢了多少
我让它查,它查得比我自己还细。
先看默认浏览器:html 还是 Safari,浏览器没被抢,这一关算它没犯浑。
接着它翻了 DuMate 自己的 Info.plist,结果一目了然:这个 App 在自己的声明文件里,一口气登记了 txt、md、log、doc、docx、xls、xlsx、ppt、pptx、pdf、jpg、png、gif、csv、json、js、ts、py、go、java、html、css,而且全标了 LSHandlerRank = Default。
💡 这个 Rank 是什么意思
Default 的意思是"这些文件默认归我打开"。新 App 一注册到系统,LaunchServices 就会把默认处理权给它。它不需要改你任何设置文件,在自己 App 包里写一句话就够了。查完的真相有点出人意料:
- ●真被抢走的
:md、Office 全家桶(doc/docx/xls/xlsx/ppt/pptx)、csv,以及一堆源码文件; - ●没抢走的
:pdf、图片、txt——预览和文本编辑这些系统 App 是 Owner级声明,Default抢不过Owner; - ●浏览器
:Safari 一直稳稳在位。

放大镜下查系统配置文件找证据
● ● ●
二、比"抢"更烦的是缓存
修复过程踩了两个坑,值得记下来。
坑一:直接调系统 API(LSSetDefaultRoleHandlerForContentType)写新关联是好使的,但对配置文件里已存在的条目,它静默不更新——返回码是 0,读回来还是旧值。一开始我对着"err=0"傻了半天。
坑二:改完配置文件,LaunchServices 守护进程(lsd)有自己的内存缓存。新条目它认得,老条目还是旧的。最后 killall lsd 重启一下,读回来的结果才和文件里写的一致。
整个修复其实就是三步:
# 1. 备份(最重要的一步) cp ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist \ ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.bak # 2. 按类型写回 LSHandlerContentType → 对应 App # 3. 刷新系统 killall lsd && killall Finder✅ 动手前一定备份
● ● ●
三、修完长这样
最后不是简单改回去,而是按我的使用习惯重新排了一遍:
改完验证了一遍,系统里剩下的百度相关关联只有 dumate:// 这个它自己的协议,正常现象,不碍事。

修完后文件们各回各家
● ● ●
四、复盘:下次怎么防
这次体验挺魔幻的——本来只想发句牢骚,结果收到了一份完整的排障报告。但教训本身是通用的:
装国产新 App 前后,看一眼它的 CFBundleDocumentTypes。==凡是LSHandlerRank = Default的,都是潜在的抢默认选手==。- 自己显式设一遍默认打开方式,优先级永远高于 App 自己的声明
。设成显式覆盖之后,哪怕它以后更新、重新注册,也抢不回去。 真不打算用,卸载最彻底;留着也无妨,覆盖写死就行。
● ● ●
最后
那天我对着终端里一溜 js -> VS Code 的读回结果,沉默了几秒。
本来只是想抱怨一下,结果顺手把"哪些文件该用什么打开"这件事彻底理顺了。
你被哪个软件顺手改过默认打开方式?评论区聊聊,我看看大家都是怎么收拾的。