Traté de escribir una subclave del registro y su valor correspondiente al registro de esta manera:¿Por qué se escribe el registro en una ubicación diferente a la esperada?
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();
Ahora el problema es que cuando miro en la ubicación manualmente (a través de regedit) No puedo ver la carpeta SOFTWARE\Apple\Banana
en HKLM
.
Pero cuando ejecuto el código anterior de nuevo y depuro, puedo ver que Registry.LocalMachine.OpenSubKey(subKey)
y rk.GetValue(regKey)
producen los valores guardados anteriormente. Sin embargo, no veo los valores en la ubicación dada a través de regedit. Así que en buscar en el registro, puedo ver las claves y los valores anteriores en las ubicaciones siguientes:
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
En tanto, que los valores permanecen exactamente como he salvado. Así que me di cuenta que es desde donde mi aplicación lee el valor, aunque en mi código llamo desde HKLM\SOFTWARE\Apple\Banana\
..
Por qué sucede esto? ¿Está relacionado con el tema de los derechos de acceso?
¿Este comportamiento es esperado? En este sentido, este valor es muy importante para mí, así que solo sé si hay algún riesgo asociado con la reubicación automática.
¿Hay una manera correcta de escribir al registro de modo que permanezca en su ubicación exacta ..
Mi cuenta de administrador es uno, y estoy usando 32 bits de Windows 7.
Editar: como llegué a saber, la entrada del registro se almacena en la ubicación actual de los usuarios en lugar de HKLM. Y cuando consulto el valor de reg de una cuenta diferente, no obtengo el valor. En pocas palabras, no tiene sentido en primer lugar de guardarlo en HKLM :(
Responda a su comentario "¿pero esto no significa que un futuro usuario que consulte la misma ubicación en hklm no obtendrá el valor que reside en la ubicación actual de los usuarios? Ok, voy a probarlo de todos modos" - sí lo hace. HLM en el registro y los archivos de programa y los directorios de ProgramData solo deben escribirse durante la instalación. Solo los administradores pueden escribir de otra manera (y solo con elevación si UAC está habilitado). –
@DannyVarod No recibí tu primera oración. De todos modos, cuando probé aprendí que la virtualización no ayuda si desea obtener el mismo valor de registro para todos los usuarios. – nawfal
Hay varias ubicaciones en Windows 6+ que están destinadas a contener datos de configuración solamente y hay otras ubicaciones que son destinado a contener datos configurables o datos que cambian durante el tiempo de ejecución. Durante la configuración, los usuarios tienen permiso para escribir en las ubicaciones de configuración (por administrador a través de UAC). Durante el tiempo de ejecución windows impide el acceso a estas ubicaciones a menos que el usuario sea administrador. (Los administradores no deben afectar a otros usuarios.) –