访问Visual Studio 2017的私有注册表配置单元

Visual Studio使用私有注册表配置单元而不是“污染”系统注册表 – 通常在这样的地方找到:

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

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

在C#中通过键加载和访问此文件的最简单方法是什么?

要手动查看,可以使用regedit.exe应用程序通过执行以下操作来加载privateregistry.bin文件:

  1. 启动RegEdit.exe
  2. 在左侧窗格中选择Computer \ HKEY_LOCAL_MACHINE节点
  3. 选择文件| 加载Hive …菜单项,并加载privateregistry.bin
  4. 当提示输入密钥名称时,只需键入“VSRegHive”之类的内容
  5. 这会将数据加载到HKLM节点下的VSRegHive中
  6. 完成浏览后,请务必选择VSRegHive并选择File | 卸载Hive …,在退出RegEdit.exe实用程序之前,否则VS将无法启动。 保持hied加载在regedit中会产生某种阻止DevEnv.exe启动的锁定。

以编程方式访问密钥RegLoadAppKey确实是您最好的选择。

此致,Ed Dore

我刚遇到类似的问题并发现了这个 SOpost。 根据我的经验,您必须为项目使用x86配置,否则您将遇到exception。 我已根据您的问题调整了代码。

 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")