Добавление ключа реестра в C# показывает, когда я читаю его обратно, но не в regedit

Я добавляю раздел реестра, используя следующий код:

var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(key);

В моем коде я могу прочитать значение поиска, даже между запусками. Однако ключ никогда не отображается в regedit, и другая программа, которая должна читать ключ, не может его увидеть.

Программа работает на Vista с повышенными привилегиями.

5 ответов

Решение

Vista представила виртуализацию реестра; "глобальные" изменения реестра, в некоторых случаях, перенаправляются в определенные пользователем местоположения:

Виртуализация реестра - это технология совместимости приложений, которая позволяет перенаправлять операции записи в реестр, которые оказывают глобальное влияние, на местоположения пользователей. Это перенаправление прозрачно для приложений, читающих или пишущих в реестр. Поддерживается начиная с Windows Vista.

Эта форма виртуализации является временной технологией совместимости приложений; Microsoft намерена удалить его из будущих версий операционной системы Windows, поскольку все больше приложений будут совместимы с Windows Vista. Поэтому важно, чтобы ваше приложение не зависело от поведения виртуализации реестра в системе.

Вы можете отключить это, настроив манифест своего приложения, или вы можете изменить политику только для ключа, к которому вы прикасаетесь.

WOW64 (у вас 64-битная версия Vista?) Также выполняет перенаправление реестра. Это укусило меня раздражающими способами.

См. Статью MSDN о виртуализации реестра.

Это звучит как проблема виртуализации реестра. Если пользователь вашего приложения не является администратором, то запись реестра будет виртуализирована в виртуальное хранилище для каждого пользователя - хотя, если ваша другая программа работает под той же учетной записью, она все равно должна видеть этого пользователя установка...

Связанная страница говорит вам, где найти виртуальный магазин, чтобы проверить эту теорию.

Можете ли вы сказать, какой улей вы смотрите в реестре? Мое первое предположение было бы, что вы можете случайно искать не в том месте.

Мне кажется, что, даже если вы думаете, что работаете с повышенными привилегиями, это не так - и что доступ к реестру ваших программ тихо перенаправляется в безопасное место.

Проверьте виртуализацию реестра для деталей.

У вас могут не быть те привилегии, которые вы считаете нужными. При включенном контроле учетных записей ОС создаст виртуальный реестр для записи, если у вас недостаточно прав для записи в "настоящий" реестр (то же самое относится и к файловой системе).

Другие вопросы по тегам