写在前面的话
大家好,我是离尘!
公众号很久没更新了,说来惭愧,这段时间里有大部分业余时间都花在了一个看似不起眼的技术问题上。这两天总算可以把它暂时画个句号,于是决定把整个过程整理出来,也算是对这段时间的一个交代。
如果你也遇到VSCode右键菜单莫名其妙变成乱码,且网上找不到有效方案,或许这篇文章能给你一些参考。当然,如果你对注册表机制有更深的理解,也欢迎帮我看看相关结论是否正确。
一、问题现象
应该都还记得吧,我上次推荐的清理工具HiBit Uninstaller(
不记得的回去看看【必装软件】HiBit Uninstaller的手把手教学)
前段时间,我日常使用HiBit Uninstaller对系统做例行扫描,扫描后发现VSCode的右键菜单出现了乱码情况,原本的“通过 Code 打开”菜单项变成了“N瞓謅傝﨩口_⊂瞇”。菜单功能正常,点进去仍能打开VSCode,但显示不正常,看着非常别扭。

图1 乱码示例
经过一段时间的排查,定位到了相关环境信息,只要满足以下条件,即可实现问题复现:
操作系统:Windows 11
VSCode版本:VSCodeUser-x64-1.111.0(安装时勾选了“将‘通过 Code 打开’添加到文件上下文菜单”)
HiBit Uninstaller版本:4.0.10
起初我以为是偶然问题,于是卸载重装VSCode,但乱码很快又再次出现了。我又尝试了网上能找到的仅有的几篇修复教程,它们大多指向了
HKEY_CLASSES_ROOT\*\shell\VSCode这个注册表路径,但我在Windows 11中根本找不到这个路径。显然,这些方法已经过时了或者不适用于Windows11系统。
二、反复实验,发现规律
为了搞清问题,我在虚拟机里反复复现,做了大量对照实验,逐步摸清了一些规律:
仅Windows 11复现
经过测试,在Windows 10环境下使用完全相同的软件版本,执行同样的操作,从未出现乱码。说明问题可能与Windows 11的某种机制有关。
与用户名无关
考虑到当前很多人喜欢使用中文用户名,而这会导致很多乱码错误,因此我重点测试了不同账户,发现无论使用微软账户还是本地账户,账户名是中文名还是英文名,都能稳定复现。
扫描即触发
一开始以为是HiBit Uninstaller清理了VSCode的一些相关注册表,但是经过反复实验,发现只要执行HiBit Uninstaller的注册表扫描(不需要点击清理),乱码就出现了。这说明乱码并非由“清理”动作引起,而是扫描过程本身产生了影响。
普通卸载无效
一般来说,解决问题的终极杀招就是卸载重装。但是我发现直接卸载VSCode并重装,乱码依然存在。只有用HiBit Uninstaller的注册表清理功能彻底清除VSCode相关残留,再重装,才能恢复正常。正所谓:“解铃还须系铃人”,这说明问题可能出在注册表残留上。
为此,我还用了ProcMon和RegShot等工具尝试抓取注册表变化,但反复排查了监控结果没有发现明显的篡改行为,那段时间几乎每天都在反复安装系统、重装软件、比对注册表,但始终找不到根源。
三、全网首发,CSDN求助
我开始在网上搜索,发现几乎没有人报告过这个问题。偶尔看到一些类似的右键菜单乱码案例,但要么是过的方法,要么是其他软件引起的,与我的情况不完全一致。

图2 过时的教程
我尝试向AI求助。借助AI的强大的检索能力,在各个技术论坛,社区等查找资料,然后AI给出一些看似合理的建议,比如修改某个注册表项、重置VSCode设置等。但AI给出的所有方案都基于它检索到的已有文章,而导致问题回到了最初面临的情况——没有人和我同样的情况,甚至连求助都没有。
我意识到,这个问题在我之前可能根本不存在于网络上或者说由于影响不大也根本没人在意。换句话说,我可能遇到的是一个“全网首发”的新问题!
在AI无能为力后,我决定把问题发到CSDN社区,希望能遇到有过类似经验的高手。
最初几天,帖子下陆续出现一些回复,但仔细一看,很多都是AI生成的套话,甚至连我问题描述中明确提到的已经尝试使用AI的经历都不看,直接套用网上现有的相关的修复教程,给我一篇像模像样的回复。说实话,当时有点失望。
就在我对当前技术论坛AI遍地而失望时,一位大佬出现了。经过他的分析我大致了解了问题情况,在他的指导下,我逐一进行了二次的排查,并最终分析出了问题的根源分析并尝试性提出了解决方案。
四、问题分析
我们的思路是一样的:既然是使用清理注册表功能出现的问题,那就从注册表开始着手。
我一开始认为是HiBit Uninstaller在启动扫描的时候将VSCode的注册表项当垃圾清理了,因为经过反复监控,HiBit Uninstaller在扫描时确实有删除注册表的行为,但是经过逐一检查,里面并没有删除VSCode的相关注册表项,这让我百思不得其解,就没有继续深入了解。
而大佬则注意到了这些扫描期间会多出来很多注册表项,并深入进行了了解。
在他的提示下,我发现HiBit Uninstaller在执行注册表扫描时,会在
HKLM\SOFTWARE\Classes下创建与
HKCU\Software\Classes中同名但完全为空的项(没有子项,没有任何值)。

图3 HiBit Uninstaller创建了大量注册表项
但值得注意的是此时VSCode在HKCU下是有正确的配置项的(比如VSCodeContextMenu),而现在又在HKLM下被多塞了一个同名的空项。但是我想,多一点空的注册表似乎没什么影响吧。
这里就有一个知识点了:
Windows电脑在读取时,一般来说
HKEY_CURRENT_USER\Software\Classes(HKCU)的优先级高于
HKEY_LOCAL_MACHINE\SOFTWARE\Classes(HKLM)且HKCU中的设置会覆盖HKLM中的同名设置。
为了理解这一点,我们需要先了解HKEY_CLASSES_ROOT(HKCR)的本质:HKCR和HKCU、HKLM不同,它并不是一个独立存储数据的根键,而是一个合并视图概念,逻辑上由上述两个路径共同构成:
HKEY_CLASSES_ROOT = HKCU\Software\Classes + HKLM\SOFTWARE\Classes这个机制确保了系统级的默认设置(HKLM)和用户级的个性化设置(HKCU)能够协同工作:
这种设计的初衷在于平衡:HKLM存放影响所有用户的默认设置(由管理员或软件安装程序设定);而HKCU存放当前用户的个性化覆盖设置,允许用户在不影响其他用户的情况下自定义文件关联或程序行为。
我们最初的想法一样,怀疑是HiBit Uninstaller的最新版本才引入的bug。因为在在之前我从来没有出现过清理注册表后造成乱码的情况。于是他特意换回了3.2.70的旧版本重新测试。我在收到他的研究结果后,使用更老的3.2.55版本进行测试,测试后得到了同样的结论:
旧版本同样会在HKLM下创建这些空项
这说明生成空项的行为在HiBit Uninstaller中已经存在很长时间了,并非4.0.10特有的问题。那么问题来了:如果这个行为早就存在,为什么右键菜单乱码是最近才出现的?
于是排查方向由HiBit Uninstaller转向了VSCode。通过查看和验证VSCode的历史版本,逐个阅读更新报告,最终锁定了变化发生的版本号:
在VSCode2026年1月的新版本(即1.109系列)中,VSCode为了适配Windows 11的原生一级右键菜单(也就是不再需要点“显示更多选项”)修改了右键菜单的注册表路径!

图4 更新报告中引入了右键菜单集成
在旧版本的VSCode中:右键菜单注册在
HKEY_CLASSES_ROOT\*\shell\VSCode和
HKEY_CLASSES_ROOT\Directory\shell\VSCode等路径下——这也就解释了为什么网上的教程和方法都是指向该路径的原因。
而1.109及之后版本,右键菜单注册路径迁移到了
HKEY_CURRENT_USER\Software\Classes下的相关项中。
而恰恰是这次迁移,让VSCode的右键菜单配置从原来的 HKCR 区域转移到了更依赖 HKCU 的位置。结合我刚刚讲的知识点来看,虽然我暂时不理解HiBit Uninstaller为什么会在执行扫描操作时在
HKLM\SOFTWARE\Classes下创建大量同名的空项。但是从系统读取逻辑来看这应该并不会造成任何影响。
但恰恰在Windows 11中,对于VSCode这类外壳扩展,系统的优先级规则似乎被改写了——它不再优先读取 HKCU,而是优先读取 HKLM 下的同名项。于是,系统读到了那个HiBit Uninstaller创建的空项,拿不到显示文本,最终以乱码示人。
这解释了为什么只有Windows 11会出问题:我们怀疑很可能是Windows 11为了适配新的右键菜单层级,调整了某些扩展的优先级策略,而这个调整恰好暴露了HiBit Uninstaller创建空项的行为。
五、得出结论和解决方案
至此,整个问题的链条完全清晰了:
- HiBit Uninstaller早在多个版本前就存在“扫描时在
HKLM下创建同名空项”的行为。 - VSCode在2026年的新版本中将右键菜单注册路径迁移到了
HKCU区域。 - Windows 11对外壳扩展的优先级策略可能是优先读取
HKLM下的同名项。 - 三者叠加 → 系统读到了
HKLM下的空 VSCodeContextMenu项 → 没有显示文本 → 乱码。
基于以上分析,解决思路很也就很清晰了:要么删除
HKLM\SOFTWARE\Classes下那个同名的空项,要么就自己创建一个非空的项。
先说说删除操作,根据我后来的测试,虽然HiBit Uninstaller创建了很多空项,但是真正影响右键菜单显示的应该只有VSCodeContextMenu,如果它存在且为空,直接删掉,系统就会回落到HKCU下的正确配置,右键菜单恢复正常。
手动删除很简单:以管理员身份打开注册表编辑器,定位到
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VSCodeContextMenu确认该键下无任何子项和值后,删除即可。之后重启文件资源管理器,乱码问题应该就消失了。
再来说说另一个解决办法,也就是手动赋值。既然Windows系统要优先读取HKLM下的同名项,那么我们就手动对其赋值,使其非空,确保系统能够正常读取。这也是我比较推荐的方法操作方法如下:
- 以管理员身份打开注册表编辑器(regedit);
- 定位到
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VSCodeContextMenu- 在右侧空白处右键 → 新建 → 可扩充字符串值;
- 将名称改为Title,数据填写通过 Code 打开;
- 关闭注册表编辑器,重启文件资源管理器。
此时,HKLM下的VSCodeContextMenu有了一个Title值,系统能读取到正确的显示文本,乱码消失。而且,这个值的存在不会影响VSCode的正常功能,后续再次使用HiBit Uninstaller扫描也不会破坏它(因为该项已经不是空的了,HiBit不会再对其产生额外影响)。
当然,还有一个更简单的办法,就是回退VScode的版本,只要回退到2026年之前的版本,不过我不是很推荐,毕竟更新后的VScode拥有很多新的特性。
但考虑到这类操作具有一定风险,为了避免误删等情况,同时也为了便于大家操作,我基于以上两个思路写了两个个PowerShell脚本,一个可以自动扫描并删除 HKLM 下与 HKCU 同名、且为空的VSCode相关项。另一个可以执行写入操作,给注册表赋值。脚本会自动提权,方便操作,两个脚本我已打包已经上传至我的下载网站(https://download.luolichen.top/),需要自取。
温馨提示:下载后请务必阅读使用说明《用前必看.md》推荐直接使用预览功能直接查看

图5 点击预览功能查看md格式文档
更推荐使用写入脚本,可以一劳永逸解决该问题,不会影响VSCode最新版和HiBit Uninstaller的使用。而删除脚本只能暂时恢复正常,在下次启动HiBit Uninstaller扫描注册表时会再次出现乱码。
注意:这两个方案只解决了VSCode的问题而HiBit Uninstaller还可能会在其他软件对应的 HKLM 路径下创建空项,从理论上讲,任何软件如果在未来也改成优先读取 HKLM 下的配置,而 HKLM 下恰好被HiBit Uninstaller塞了一个同名空项,就可能会重现类似VSCode的问题。不过那些空项目前没有发现明显副作用,但理论上仍存在未知风险。
删除脚本为了减少对未知注册表的影响,特地使用了筛选,仅会删除包含vscode字样且在HKLM下同名的空项。从某种角度来看,删除操作反而是最安全的,因为删除的是多余的空项,相当于恢复原状,而写入则是影响了Windows的读取操作。因此各位按需选择脚本,如果有更好的方法,欢迎评论区告知我!
那么以上就是本期文章的全部内容了
希望我的文章能给你带来帮助!
本文内容基于本人实测经验整理,仅供学习参考。原创不易,转载需授权。
批注与评论功能需要登录后使用(账号与主站通用)。
前往主站登录 →