tôi đã cố gắng để viết một khóa registry và giá trị tương ứng của nó phải đăng kiểm như thế này:Tại sao sổ đăng ký được viết ở vị trí khác với mong đợi?
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();
Bây giờ vấn đề là tôi khi tôi nhìn vào vị trí bằng tay (thông qua regedit) Tôi không thể nhìn thấy thư mục SOFTWARE\Apple\Banana
trong HKLM
.
Nhưng khi tôi chạy lại mã ở trên và gỡ lỗi, tôi có thể thấy rằng cả hai Registry.LocalMachine.OpenSubKey(subKey)
và rk.GetValue(regKey)
đều mang lại giá trị được lưu trước đó. Tuy nhiên, tôi không thấy các giá trị ở vị trí đã cho qua regedit. Vì vậy, về tìm kiếm trên registry, tôi có thể thấy các phím và các giá trị ở trên tại các địa điểm sau:
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
Dưới cả đó các giá trị vẫn còn chính xác như tôi đã lưu. Vì vậy, tôi nhận ra điều này là từ nơi ứng dụng của tôi đọc giá trị mặc dù trong mã của tôi, tôi gọi nó là từ HKLM\SOFTWARE\Apple\Banana\
..
Tại sao điều này xảy ra? Có liên quan đến vấn đề quyền truy cập không?
Hành vi này có được mong đợi không? Trong ý nghĩa, giá trị này rất quan trọng đối với tôi, vì vậy tôi chỉ biết nếu có một số rủi ro liên quan đến việc tự động di chuyển!
Có một cách thích hợp bằng văn bản cho registry để nó vẫn ở vị trí chính xác của nó ..
tài khoản của tôi là quản trị viên một, và tôi đang sử dụng 32 cửa sổ chút 7.
Chỉnh sửa: Như tôi đã biết, mục đăng ký được lưu trữ trong vị trí người dùng hiện tại chứ không phải là HKLM. Và khi tôi truy vấn giá trị reg từ một tài khoản khác, tôi không nhận được giá trị. Nói tóm lại, không có điểm trong đầu tiên của tất cả các lưu nó vào HKLM :(
Trả lời nhận xét của bạn "nhưng điều này có nghĩa là người dùng trong tương lai truy vấn cùng một vị trí trong hklm sẽ không nhận được giá trị nằm trong vị trí người dùng hiện tại? Ok tôi sẽ kiểm tra nó" - có. HLM trong sổ đăng ký và tệp chương trình và thư mục ProgramData chỉ nên được ghi vào khi thiết lập. Chỉ quản trị viên mới có thể viết ở đó nếu không (và chỉ với độ cao nếu UAC được bật). –
@DannyVarod Tôi không nhận được câu đầu tiên của bạn. Dù sao khi tôi thử nghiệm, tôi đã biết rằng ảo hóa không giúp bạn nếu bạn muốn có cùng giá trị đăng ký cho tất cả người dùng. – nawfal
Có nhiều vị trí khác nhau trong Windows 6+ có nghĩa là chỉ giữ dữ liệu thiết lập và có các vị trí khác có nghĩa là giữ dữ liệu có thể định cấu hình hoặc dữ liệu thay đổi trong thời gian chạy. Trong quá trình thiết lập, người dùng được cấp quyền ghi vào các vị trí thiết lập (bởi quản trị viên qua UAC). Trong thời gian chạy cửa sổ ngăn truy cập vào các vị trí này trừ khi người dùng là quản trị viên. (Không phải quản trị viên không nên ảnh hưởng đến những người dùng khác.) –