Я попытался записать подраздел реестра и соответствующее ему значение в реестр следующим образом:
const string subKey = @"SOFTWARE\Apple\Banana\";
const string regKey = "pip";
var rk = Registry.LocalMachine.OpenSubKey(subKey);
if (rk == null)
rk = Registry.LocalMachine.CreateSubKey(subKey);
var rv = rk.GetValue(regKey);
if (rv == null)
rk.SetValue(regKey, "XXX");
return rv.ToString();
Теперь проблема в том, что я, когда я смотрю в локации вручную (через regedit), я не вижу папку SOFTWARE\Apple\Banana
в HKLM
.
Но когда я снова запускаю приведенный выше код и выполняю отладку, я вижу, что и Registry.LocalMachine.OpenSubKey(subKey)
, и rk.GetValue(regKey)
дают ранее сохраненные значения. Тем не менее, я не вижу значений в данном месте через regedit. Итак, при поиске в реестре я вижу указанные выше ключи и значения в следующих местах:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
При обоих значения остаются именно такими, как я сохранил. Итак, я понимаю, что это то место, откуда мое приложение считывает значение, хотя в моем коде я вызываю его из HKLM\SOFTWARE\Apple\Banana\
..
Почему это происходит? Это связано с проблемой прав доступа?
Это ожидаемое поведение? В том смысле, что это значение очень важно для меня, поэтому я просто знаю, есть ли какой-то риск, связанный с автоперемещением!
Есть ли правильный способ записи в реестр, чтобы он оставался в своем точном местоположении.
Моя учетная запись администратора, и я использую 32-битную Windows 7.
Изменить: как я узнал, запись реестра хранится в местоположении текущего пользователя, а не в HKLM. И когда я запрашиваю значение reg из другой учетной записи, я не получаю значение. Короче, нет смысла в первую очередь сохранять его в HKLM :(