Доступ к частному реестру 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
]
Каков самый простой способ загрузить и получить доступ к этому файлу с помощью ключа на С#?
Ответы
Ответ 1
Чтобы просмотреть вручную, вы можете использовать приложение regedit.exe для загрузки файла privateregistry.bin, выполнив следующие действия:
- Запустите RegEdit.exe
- Выберите узел Computer\HKEY_LOCAL_MACHINE в левой панели.
- Выберите файл | Загрузите пункт меню Hive... и загрузите файл privateregistry.bin
- Когда будет предложено ввести имя ключа, просто введите что-то вроде "VSRegHive"
- Это загрузит данные в VSRegHive под узлом HKLM
- Когда вы закончите изучение, не забудьте выбрать VSRegHive и выбрать File | Перед выходом из утилиты RegEdit.exe выгрузите Hive..., иначе VS не запустится. Сохранение куста, загруженного в regedit, создает некую блокировку, которая препятствует запуску DevEnv.exe.
Программный доступ к ключу RegLoadAppKey - действительно ваш лучший выбор.
Ответ 2
У меня была аналогичная проблема, и я нашел эту публикацию SO. По моему опыту вы должны использовать конфигурацию 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(...)
В дополнение к вышеуказанному методу, возможно, можно использовать "обычные".Net методы для доступа к реестру после вызова "CreateForApplication". Просто используйте что-то вроде этого:
Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\VisualStudio\15.0\ExtensionManager\EnabledExtensions")