HOWTO: 解决资源管理有两个 OneDrive
上周 gOxiA 一个不小心把两个数据盘给误格了,数据损失近 2TB,整整耗费了1周的时间才将数据恢复,由于是主力机所以系统也只能重新安装,Windows 10 1607版,没想到刚安装完就发现一个问题,OneDrive 初始化设置完毕后在资源管理器中竟然看到两个图标目录,位于桌面下,十分诡异!既然是同名同路径,而且图标显示 OneDrive 的状态和右键功能都正常,说明这两个图标应该是通过注册表加载的标识符。
标识符在系统中是具有唯一性的,否则也不可能出现两个同名图标,搜索 MSDN 了解到在注册表中 CLSID 分支存储着系统中所有 COM 类对象的数据,路径位于 “HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}”,启动注册表编辑器定位到这个路径开始搜索关键词 OneDrive,看看会有什么收获!如下截图搜索到了很多 OneDrive 相关的标识符,其中有些 CLSID 下包含 ShellFolder 看起来挺有关联。
为了继续验证,启动了 Sysinternals 套件的 Process Monitor 工具对资源管理进行监测,因为重点怀疑的是注册表,并且问题在资源管理器中可以重现,所以进行了过滤,果然收集到了有价值的数据。从截图可以看到当 gOxiA 访问资源管理器的这两个 OneDrive 后,Process Monitor记录下了这两个图标的 CLSID,分别是:
{018D5C66-4533-4307-9B53-224DE2ED1FE6}
{D227B6E2-5C41-4EB2-BD76-51940CFD391F}
既然找到了两个图标的 CLSID 那么就可以在注册表中缩小搜索范围了。继续搜索注册表锁定了问题范围,从下面截图可以看到在下面两个路径下存在 CLSID 记录,从注册表项的名称看确有关联。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel
下来尝试修改“HideDesktopIcons”-“NewStartPanel” 下相关的 CLSID 值改为为 0,不隐藏图标进行测试。(注意:在进行注册表操作前一定要进行备份!!!)刷新桌面,可以看到出现了两个 OneDrive 图标,OK 问题可以锁定了!但奇怪的是当删除其中一个 OneDrive 的 CLSID 后,桌面仍有两个图标,而且资源管理其中也仍旧显示两个图标。尝试删除“Desktop”-“NameSpace” 下的项进行测试,发现两个图标的问题解决了!
虽然问题得到解决了,但是应该删除哪个 CLSID 呢?如何确定这两个 CLSID 哪个才是当前 OneDrive 所使用的呢?翻出之前 Process Monitor 监测的结果,可以看到 OneDrive 的配置项所在的位置。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\OneDrive
顺藤摸瓜再接再厉,找吧!
功夫不负有心人,HKEY_CURRENT_USER\SOFTWARE\Microsoft\OneDrive\Accounts\Personal,下面“NamespaceRootId”记录的 CLSID 值就是当前所使用的,至此可以收官了!
结束前做了一个小测试,删除了当前正在使用的 CLSID 项,发现从系统栏打开 OneDrive 时会报错。此外还有一个问题!虽然删除了资源管理器和桌面中的图标(注册表对应的项和值),但是监测发现,打开资源管理时还是会去读取已经删除的 CLSID,说明仍有残留,可是注册表中已经搜索不到这个 CLSID,检查 OneDrive 的配置文件仍一无所获,也许是一个 Bug 已经提交微软反馈中心,期待后续会彻底解决。(考虑重新做一遍系统,同步数据这事还是靠谱点好!!!)