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

原脚本how-toprocess monitorsysinternalsvsvisual studiovs2017vs2019注册表

缘起

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

调查

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

使用process monitor

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

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

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

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

在注册表中搜索

首先,在注册表中搜索VsClearRecentProjects.sln,结果如下:

find-in-registry

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

继续在磁盘文件中搜索

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

fileLocator-search-result

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

验证

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

{% note info %}

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

{% endnote %}

{% note warning %}

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

{% endnote %}

清理

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

脚本

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

@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

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

vs-history

关于\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

提问者最后的回答更加明确,引用了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):

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 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:

参考资料

原文地址:https://www.cnblogs.com/bianchengnan/p/12242488.html

时间: 2024-08-03 08:24:11

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

[原]排错实战——解决Tekla通过.tsep安装插件失败的问题

原总结调试排错troubleshootteklaprocess monitorsysinternals 缘起 最近同事使用.tsep安装Tekla插件的时候,Tekla提示该插件已经存在了,需要卸载后再安装.同事找了半天,没找到怎么卸载,我也没找到.于是决定弄清楚Tekla是 如何判断一个插件安装与否的. 想必看过我其它排错文章的小伙伴已经猜到了,我们今天文章中的主角依然是process monitor.好了,话不多说,好戏马上开始. 调查 在开始调查之前,我们可以先思考下,Tekla是如何判断

[原]排错实战——解救加载调试符号失败的IDA

原调试IDA排错troubleshootsymbolspdbsysinternalprocess monitor 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windbg)可以通过调试符号(PDB)把地址与符号名对应起来,为我们提供更可读的信息.IDA应该也支持加载PDB,通过查看IDA安装目录下的idahelp.chm(打开后搜索PDB即可找到相关说明)发现还真支持.但是当我加载符号的时候,却失败了.本文记录了整个调查过程. 效果对比 先放两张对比图,大家直观感

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

原调试debug排错troubleshootprocess monitorsysinternals 缘起 最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的.代码是同一份,vs版本也一样(打的补丁也一样).编译出来的程序在两台电脑上运行的结果就是不一样.惊不惊喜,意不意外?如果是你遇到了这种情况,你会怎么调查呢?:upside_down_face: {% note info %} 说明: 为了跟大家分享这个问题,我事后在自己的机器上重新把整个过程梳理了一遍,并保存了pro

[原]排错实战——使用process explorer替换任务管理器

原Aha总结注册表process explorersysinternalsprocess monitor 前言 一般,我们会使用任务管理器查看系统中有哪些进程正在运行,强制杀掉某个进程.可是系统自带的任务管理器功能有限,process explorer是一个功能更强大的工具.它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程,进程加载了哪些dll,打开了哪些文件,线程的cpu使用情况,线程的调用栈,哪些文件被哪些进程占用了,等等 …… ).有没有办法让process explorer替

[原]调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

原调试debugwindbghangprocess explorer 前言 如果我们自己的程序的CPU Usage(CPU占用率)飙升,并且居高不下,很有可能陷入了死循环.你知道怎么快速定位并解决吗?今天跟大家分享几种定位方法,希望对你有所帮助. 如何判断是否有死循环? 通过电脑风扇的声音猜测. 如果风扇一直响个不停,说明电脑很热.高CPU占用率会导致CPU发热量增大,从而导致风扇狂响.如果听到风扇响个不停,可以打开任务管理器看看CPU占用率是不是很高.如果发现是我们的进程导致的高CPU占用率,

【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 内存补码分析 #include<stdio.h> #include<stdlib.h> void main3() { //printf

安装SDK后打开安卓工程后有如下错误:发现了以元素 &#39;d:skin&#39; 开头的无效内容。此处不应含有子元素。

Error: Error parsing D:\Program Files\SDK\android-sdk-windows\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type.2.4.d: 发现了以元素 'd:skin' 开头的无效内容.此处不应含有子元素. 参考往上的帖子:我的做法也是一样:把上面路径下的devices.xml文件删除,然后把"D:\Program Files\SDK\an

NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

NET Core 实战:使用 NLog 将日志信息记录到 MongoDB https://www.cnblogs.com/danvic712/p/10226557.html ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB 一.前言 在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量的数据,通过对这些数据进行集中分析,可以产生

VS2012 C# Visual studio 2012 打开时显示最近打开的解决方案记录

Visual studio 显示打开文件记录 Visual studio显示最近打开解决方案记录 新装了vs2012后,vs不显示最近打开的解决方案记录,需要每次重新定位路径和打开,很不方便.最近找到解决办法: 1.开始(电脑左下角) → 运行 → 输入 regedit 回车,打开注册表编辑器. 2.定位到 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer,双击 NoRecentDocsHi