Lớp RegistryPermission điều chỉnh các quyền bảo mật xung quanh phím reg. Để kiểm tra xem bạn có thể có quyền ghi vào quyền bạn sử dụng theo cách sau không:
RegistryPermission perm1 = new RegistryPermission(RegistryPermissionAccess.Write, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
Sau đó, bạn sẽ sử dụng phương thức "Yêu cầu" trong thử/nắm bắt và trả về lỗi (tăng tính bảo mật) ngoại lệ). Về thành công, bạn sẽ tiếp tục và thực hiện cập nhật của mình. Mặc dù đây không phải là những gì bạn muốn, một kiểm tra về quyền truy cập trước khi truy cập, nó là cách được chấp nhận để đảm bảo bạn có quyền bạn cần trước khi bạn hoạt động trên các phím.Một cách có cấu trúc hoàn toàn này sẽ tương đương với:
try
{
RegistryPermission perm1 = new RegistryPermission(RegistryPermissionAccess.Write, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
perm1.Demand();
}
catch (System.Security.SecurityException ex)
{
return;
}
//Do your reg updates here
EDIT: tư duy về những gì tôi đã đề cập trong các bình luận, đây là phương pháp khuyến nông đến lớp RegistryPermission để kiểm tra sự cho phép:
using System.Security.Permissions;
using System.Security;
public static class RegistryExtensions
{
public static bool HavePermissionsOnKey(this RegistryPermission reg, RegistryPermissionAccess accessLevel, string key)
{
try
{
RegistryPermission r = new RegistryPermission(accessLevel, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
public static bool CanWriteKey(this RegistryPermission reg, string key)
{
try
{
RegistryPermission r = new RegistryPermission(RegistryPermissionAccess.Write, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
public static bool CanReadKey(this RegistryPermission reg, string key)
{
try
{
RegistryPermission r = new RegistryPermission(RegistryPermissionAccess.Read, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
}
Theo nguyên tắc chung, các phím máy địa phương yêu cầu quyền quản trị nhưng các khóa người dùng hiện tại thì không. – Brian
Cảm ơn Brian - vì vậy có thể giả sử tôi có thể ghi vào khóa này (nó sẽ chuyển sang khóa người dùng) và chỉ giữ tùy chọn được bật mọi lúc, và sau đó chỉ xử lý bất kỳ ngoại lệ nào có thể bị ném nếu không thành công? – Beardy