Почему реестр записан в другом месте, чем ожидалось?

Я попытался записать подраздел реестра и соответствующее ему значение в реестр следующим образом:

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. Итак, при поиске в реестре я вижу указанные выше ключи и значения в следующих местах:

  1. HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

  2. HKEY_USERS\S-1-5-21-44266131 -1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

В обоих случаях значения остаются такими же, как я сохранил. Итак, я понимаю, что это то место, откуда мое приложение считывает значение, хотя в моем коде я вызываю его из HKLM\SOFTWARE\Apple\Banana\..

  1. Почему это происходит? Это связано с проблемой прав доступа?

  2. Это ожидаемое поведение? В том смысле, что это значение очень важно для меня, поэтому я просто знаю, есть ли какой-то риск, связанный с автоперемещением!

  3. Есть ли правильный способ записи в реестр, чтобы он оставался в точном месте..

Моя учетная запись администратора, и я использую 32-разрядную версию Windows 7.

Редактировать: как я узнал , запись реестра хранится в местоположении текущего пользователя, а не в HKLM. И когда я запрашиваю значение reg из другой учетной записи, я не получаю значение. Короче, нет смысла в первую очередь сохранять его в HKLM :(

9
задан M.M 24 February 2015 в 10:20
поделиться