Я попытался написать раздел реестра и его соответствующее значение в реестре, как это:Почему реестр написан в другом месте, чем ожидалось?
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();
Теперь проблема заключается в том, что я, когда я смотрю в месте вручную (через смерзаться) Я не могу увидеть папку 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 :(
Ответ на ваш комментарий «но не означает ли это, что будущий пользователь, запрашивающий одно и то же местоположение в hklm, не получит значение, которое находится в текущем местоположении пользователей? Хорошо, я все равно его протещу». HLM в файлах реестра и программных файлов и ProgramData должны записываться только во время установки. Только администраторы могут писать там иначе (и только с возвышением, если UAC включен). –
@ DannyVarod Я не получил твое первое предложение. Во всяком случае, когда я тестировал, я пришел к выводу, что виртуализация не помогает, если вы хотите получить одинаковое значение реестра для всех пользователей. – nawfal
В Windows 6+ есть разные местоположения, предназначенные только для хранения данных установки, и есть другие местоположения, которые предназначенный для хранения настраиваемых данных или данных, которые изменяются во время выполнения. Во время настройки пользователям предоставляется разрешение на запись в места установки (через admin через UAC). Во время выполнения окна предотвращает доступ к этим местоположениям, если пользователь не является администратором. (Не администраторы не должны влиять на других пользователей.) –