J'ai essayé d'écrire un sous-clé de Registre et sa valeur correspondant au registre comme ceci:Pourquoi le registre est-il écrit dans un emplacement différent de celui prévu?
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();
Maintenant, le problème est que je quand je regarde dans l'emplacement manuellement (via regedit) Je ne vois pas le dossier SOFTWARE\Apple\Banana
dans HKLM
.
Mais quand je réexécute le code ci-dessus et que je débogue, je peux voir que Registry.LocalMachine.OpenSubKey(subKey)
et rk.GetValue(regKey)
donnent les valeurs précédemment sauvegardées. Pourtant, je ne vois pas les valeurs à l'emplacement donné via regedit. Donc, sur la recherche dans le registre, je peux voir les touches ci-dessus et des valeurs dans des endroits suivants:
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
Dans les deux que les valeurs restent exactement comme je l'ai sauvé. Donc, je me rends compte que c'est où mon application lit la valeur que dans mon code, je l'appelle de HKLM\SOFTWARE\Apple\Banana\
..
Pourquoi est-ce qui se passe? Est-ce lié à la question des droits d'accès?
Est-ce que ce comportement est attendu? En ce sens, cette valeur est très importante pour moi, alors je sais juste s'il y a un risque associé à l'auto-relocation!
est-il une bonne façon d'écrire au registre afin qu'il reste dans son emplacement exact ..
Mon compte est administrateur, et je me sers 32 bit windows 7.
Edit: Comme je viens de le savoir, l'entrée de registre est stockée dans l'emplacement actuel des utilisateurs plutôt que HKLM. Et quand je demande la valeur reg à partir d'un compte différent, je ne reçois pas la valeur. En bref, aucun point d'abord l'enregistrer à HKLM :(
Répondre à votre commentaire "mais cela ne signifie-t-il pas un futur utilisateur interrogeant le même emplacement dans hklm ne recevra pas la valeur qui réside dans l'emplacement actuel des utilisateurs? Ok je vais le tester de toute façon" - oui oui. HLM dans le Registre et les répertoires Program Files et ProgramData ne doivent être écrits que pendant l'installation. Seuls les administrateurs peuvent y écrire autrement (et seulement avec une élévation si l'UAC est activé). –
@DannyVarod Je n'ai pas eu votre première phrase. Quoi qu'il en soit, quand j'ai testé j'ai appris que la virtualisation n'aide pas si vous voulez obtenir la même valeur de registre pour tous les utilisateurs. – nawfal
Il y a plusieurs endroits dans Windows 6+ qui ne contiennent que des données d'installation et il y a d'autres endroits destiné à contenir des données configurables ou des données qui changent pendant l'exécution. Au cours de l'installation, les utilisateurs sont autorisés à écrire dans les emplacements d'installation (par admin via UAC). Pendant l'exécution, les fenêtres empêchent l'accès à ces emplacements sauf si l'utilisateur est admin. (Non les administrateurs ne devraient pas affecter les autres utilisateurs.) –