访问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文件:
- 启动RegEdit.exe
- 在左侧窗格中选择Computer \ HKEY_LOCAL_MACHINE节点
- 选择文件| 加载Hive …菜单项,并加载privateregistry.bin
- 当提示输入密钥名称时,只需键入“VSRegHive”之类的内容
- 这会将数据加载到HKLM节点下的VSRegHive中
- 完成浏览后,请务必选择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")