[原]排错实战——VS清空最近打开的工程记录

简介: 快速清理 visual studio 最近打开的工程列表,有脚本也有小程序

缘起

vs有一个功能 —— 在起始页会显示最近打开的工程列表,方便用户快速打开之前打开过的工程文件。但是打开的工程文件多了,想要找到自己需要的工程文件也不是那么容易的,要是能把之前打开的记录都清理干净该有多好啊。本文记录了我在查找vs2019相关设置存储位置的调查过程 。对于vs2017以前的版本,对应的设置是保存在注册表中的,从vs2017开始,不再保存在注册表,而是存储在本地配置文件中。到底存储在哪里了呢?我们一起来看看吧!

调查

调查这种问题,当然优先考虑process monitor了,对吧?

使用process monitor

  1. 打开process monitor,开始捕获事件。
  2. 打开vs2019,直到显示出最近打开的文件列表。
  3. 停止捕获。
  4. 查找vs2019访问过的注册表项记录,根据Result那列是SUCCESS进行过滤,找了一圈没发现可疑项,有几类事件非常像,但是不能进一步得到更有效的信息。

most-likely-registry-key.jpg
上图黄色高亮部分\REGISTERY\A\对应的注册表项很奇怪,不能直接跳转过去(一般在Path列中的记录都可以通过右键菜单的Jump To...跳转过去),而且在注册表中搜索不到此键。关于\REGISTERY\A\的相关资料,会在文末给出。

  1. 虽然在注册表事件中没有找到答案,我们还可以在文件读写事件里搜索。在Path列CTRL+F,搜索关键字VsClearRecentProjects.sln,没找到任何记录,在Detail列同样没搜到任何记录。​这是​什么​情况​?:confounded:

看来这次不能通过process monitor直接找到答案了(其实,process monitor已经捕获了相关的事件,只不过我没能通过已知信息找到它)。我们还有什么办法呢?vs应该不至于对这么简单的配置项进行加密存储,我们还可以在整个电脑中搜索与VsClearRecentProjects.sln相关的内容。

在注册表中搜索

首先,在注册表中搜索VsClearRecentProjects.sln,结果如下:
find-in-registry.jpg

从搜索结果来看,没有一项是跟vs有关的,看来从注册表中我们没能得到什么有价值的线索。

继续在磁盘文件中搜索

我们可以通过FileLocator对磁盘文件内容进行搜索,结果如下:
fileLocator-search-result.jpg

Wow,搜到不少相关结果。对每一项进行检查后发现ApplicationPrivateSettings.xml最有可能。

验证

关闭vs2019,删除ApplicationPrivateSettings.xml,重新启动vs2019,不再显示最近打开的工程列表。搞定!

说明:对于 vs2017及以后版本,相关配置存储在配置文件中,大家可以在自己机器上搜索该文件,删除即可。

警告:该文件中不仅仅包含最近打开的工程文件,还包含其它设置!谨慎删除(删了也没什么事)!懒人随意。

清理

知道了存储位置,清理起来就简单了。

脚本

我们可以使用以下脚本来清理,本脚本摘自网络,我做了注释及补充完善。

@echo off
:: vs2005
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList /va /f

:: vs2008
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList /va /f

:: vs2010
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\ProjectMRUList /va /f

:: vs2012
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\ProjectMRUList /va /f

:: vs2013
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\ProjectMRUList /va /f

:: vs2015
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\FileMRUList /va /f
@REGDelete HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\ProjectMRUList /va /f

:: vs2019 (需要变成你自己电脑上的路径)
@del C:\Users\BCN\AppData\Local\Microsoft\VisualStudio\16.0_20f56984\ApplicationPrivateSettings.xml

工具

如果你不想手动查找ApplicationPrivateSettings.xml的路径,可以使用我写的超级简单的winform程序。github地址 https://github.com/BianChengNan/VsClearRecentProjects ,欢迎fork
tiny-clear-tool.jpg

最后,贴出一份vs名称内部版本号的对应关系,以后可能用的到。
vs-history.png

关于\REGISTRY\A

StackExchange上的帖子 [What does the path '\REGISTRY\A\…' in Sysinternals Procmon log mean?]
中的回答对此做了很有帮助的介绍,摘录如下:

It is application hive, which can be seen in volatilty by no name! pplication hives are registry hives loaded by user-mode applications to store application-specific state data. An application calls the RegLoadAppKey function to load an application hive.

more info on

http://msdn.microsoft.com/en-us/library/windows/hardware/jj673019%28v=vs.85%29.aspx.aspx)

提问者最后的回答更加明确,引用了MSDN Forum上的问答。为了方便大家,也摘录如下:

Hi,

The increase the isolation and resilience of VS 2017, it uses now a private registry hive. Internally VS uses a redirection and while for VS extensions (which are dlls) this is transparent, for external processes (that are exes), this causes them not to work.To change values in the private registry hive by hand, you can use regedit.exe to load a private hive. You need to select the HKEY_USERS node, and click the File > Load Hive… menu. You select the privateregistry.bin file, give a name to the hive (I entered “VS2017PrivateRegistry”) and now you can see the 15.0_Config key populated as usual (note: use File > Unload Hive when done):
msdn-forum-vs-registry-a.png
To change values in the private registry hive programmatically you need either to build an extension for VS or if you want to use an external exe you need to use the RegLoadAppKey.aspx) function or avoid using the registry directly and use the External Settings Manager. See the section “Change: Reduce registry impact” in Breaking Changes in Visual Studio 2017 extensibility.

总结

  • FileLocator可以快速搜索文件内容,everything可以根据文件名进行快速搜索。
  • 条条大路通罗马,有时候简单粗暴的方法反而更有效。
  • 关于\REGISTRY\A,你学到了吗?:blush:

参考资料

相关文章
|
6月前
|
运维 Devops
云效产品使用报错问题之代码域修改配置后,删除了代码组,代码未删除,但是项目现在看不到了,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
6月前
|
数据可视化
在使用SVN的过程中,通过哪些执行查看某个文件的修改信息
在使用SVN的过程中,通过哪些执行查看某个文件的修改信息
1209 0
解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
近期在删除文件夹的时候,出现了这个“该项目不在XX中,请确认该项目的位置然后重试”的提示,实际上这个文件(夹)就在那里,死活都删不掉,win10系统重启之后删除都不行的
9208 0
|
4月前
|
Java Serverless 应用服务中间件
函数计算操作报错合集之JVM启动时找不到指定的日志目录,该如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
记录一次用命令行排错的过程
详见我的有道云笔记:点击此处跳转 。有问题请在下面留言。谢谢
621 0
Confluence 6 针对合并完全失败的内容重新运行合并
如果在系统合并的时候有任何内容的合并失败的话,一个 Confluence 的管理员可以再次重新启动内容合并(请参考前面页面的内容)。只有内容还是使用 wiki 格式的才会被合并,因此重新合并所需要的时间总是会少于原始内容合并所需要的时间的。
835 0
|
前端开发 数据库管理 索引
20180614删除bootstrap$记录无法启动3补充
[20180614][20180614]删除bootstrap$记录无法启动3(补充).txt --//昨天测试删除bootstrap$记录,导致数据库重启出现问题的修复方法: --//链接: http://blog.
1222 0