Próbowałem napisać podklucz rejestru i jego odpowiednią wartość do rejestru tak:Dlaczego rejestr jest zapisany w innym miejscu niż oczekiwano?
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();
Teraz problemem jest to, że kiedy patrzę w miejscu ręcznie (poprzez regedit) Nie widzę folder SOFTWARE\Apple\Banana
w HKLM
.
Ale po ponownym uruchomieniu powyższego kodu i debugowaniu, widzę, że zarówno Registry.LocalMachine.OpenSubKey(subKey)
i rk.GetValue(regKey)
daje wcześniej zapisane wartości. Jednak nie widzę wartości w danej lokalizacji za pośrednictwem regedit. Więc na przeszukiwanie rejestru, widzę powyższe klucze i wartości w następujących miejscach:
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
pod obiema których wartości pozostają dokładnie tak, jak zapisane. Więc zdaję sobie sprawę, to skąd moja aplikacja odczytuje wartość chociaż w moim kodu I zadzwonić z HKLM\SOFTWARE\Apple\Banana\
..
Dlaczego tak się dzieje? Czy jest to związane z problemem praw dostępu?
Czy to oczekiwane zachowanie? W tym sensie ta wartość jest dla mnie bardzo ważna, więc wiem tylko, czy istnieje ryzyko związane z automatyczną relokacją!
Czy istnieje właściwy sposób zapisu do rejestru tak, że pozostaje w jego dokładną lokalizację ..
Moje konto administratora, a ja jestem przy 32-bitowych Windows 7.
Edycja: Jak się dowiedziałem, wpis rejestru jest przechowywany w bieżącej lokalizacji użytkowników, a nie w HKLM. A kiedy wyszukuję wartość reg z innego konta, nie otrzymuję wartości. W skrócie, w żadnym momencie przede wszystkim oszczędność go do HKLM :(
Odpowiedź na twój komentarz "ale czy to nie oznacza, że przyszły użytkownik zapytany o tę samą lokalizację w hklm nie otrzyma wartości, która znajduje się w bieżącej lokalizacji użytkownika? Ok I tak go przetestuję" - tak. HLM w katalogach rejestru i plików programów i katalogów programu należy zapisywać tylko podczas konfiguracji. Tylko administratorzy mogą zapisywać tam w inny sposób (i tylko z podniesieniem jeśli UAC jest włączony). –
@DannyVarod Nie dostałem twojego pierwszego zdania. W każdym razie, kiedy testowałem, dowiedziałem się, że wirtualizacja nie pomoże, jeśli chcesz uzyskać tę samą wartość rejestru dla wszystkich użytkowników. – nawfal
Istnieją różne lokalizacje w systemie Windows 6+, które są przeznaczone tylko do przechowywania danych konfiguracji i są inne lokalizacje, które są przeznaczone do przechowywania konfigurowalnych danych lub danych, które zmieniają się podczas działania. Podczas instalacji użytkownicy otrzymują pozwolenie na zapis do lokalizacji instalacji (przez administratora za pośrednictwem UAC). W czasie działania systemu okna uniemożliwiają dostęp do tych lokalizacji, chyba że użytkownik jest administratorem. (Non admins nie powinno wpływać na innych użytkowników.) –