访问Visual Studio 2017的私有注册表文件夹

18

Visual Studio使用一个私有注册表来代替"污染"系统注册表 - 通常可以在这里找到:

C:\Users\Abx\AppData\Local\Microsoft\VisualStudio\15.0_4b0ba1c0\privateregistry.bin

[为了确定已安装的扩展,我们需要查看以下键值: Software\Microsoft\VisualStudio\15.0_4b0ba1c0\ExtensionManager\EnabledExtensions]

在C#中,访问并加载该文件的最简单方法是什么?


3
我不确定是否有托管解决方案。根据此页面上的“更改:减少注册表影响”部分,您可能需要使用P/Invoke RegLoadAppKey - itsme86
感谢您提供的信息和“Visual Studio 2017可扩展性变化”的链接。我认为您是正确的:似乎没有托管解决方案 - RegLoadAppKey方法运行良好。 - Adrian S
2个回答

22

如果想要手动审核,您可以使用regedit.exe应用程序通过以下方式加载privateregistry.bin文件:

  1. 启动RegEdit.exe。
  2. 在左侧面板中选择计算机\HKEY_LOCAL_MACHINE节点。
  3. 选择“文件|加载注册表...”菜单项,然后加载privateregistry.bin文件。
  4. 当提示输入密钥名称时,只需键入类似于"VSRegHive"的内容即可。
  5. 这将在HKLM节点下的VSRegHive中加载数据。
  6. 浏览完毕后,在退出RegEdit.exe实用程序之前,请确保选择VSRegHive并选择“文件|卸载注册表...”,否则VS将无法启动。在regedit中保留该hive会创建某种锁定,防止DevEnv.exe启动。

如果想要以编程方式访问密钥,则RegLoadAppKey确实是最好的选择。


VS2017的产品密钥在哪里可以找到? - SidD
关闭所有可能正在使用该文件的 Visual Studio 实例。 - jv42

1

我之前遇到了类似的问题,发现了this Stack Overflow的帖子。根据我的经验,你需要为你的项目使用x86配置,否则你会遇到异常。我已经根据你的问题调整了代码。

ExternalSettingsManager ext = ExternalSettingsManager.CreateForApplication(@"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe");
SettingsStore store = ext.GetReadOnlySettingsStore(SettingsScope.UserSettings);
var propNames = store.GetPropertyNames(@"ExtensionManager\EnabledExtensions");
store.GetString(...)

除了上述方法外,似乎在调用"CreateForApplication"之后可以使用"正常"的.NET注册表访问方法。只需像这样使用:
Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\VisualStudio\15.0\ExtensionManager\EnabledExtensions")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接