2009-04-06 32 views
5

Tôi đang cố gắng ghi vào sổ đăng ký tại HKEY_CURRENT_USER \ Software \ appname tuy nhiên tôi vẫn gặp lỗi khi tôi cố ghi vào khóa, tôi đã thêm thông tin sau vào lắp ráp:Cách đăng ký quyền ghi trong C#

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Write = @"HKEY_CURRENT_USER\\Software")] 

nhưng điều này chưa giải quyết được vấn đề, có điều gì khác mà tôi nên làm không?

+3

Vui lòng đăng mã bạn đang sử dụng để ghi vào khóa. Một ví dụ ngắn nhưng đầy đủ sẽ là lý tưởng. –

Trả lời

6

RegistryPermissionAttribute là một phần của Code Access Security aka CAS, đây là hệ thống cấp phép kiểm tra quyền bạn có bên trong khung .NET. Các quyền này được xác định theo chính sách bảo mật. There are 4 security policies:

  • Doanh nghiệp - chính sách cho họ máy là một phần của cài đặt Active Directory.
  • Máy - chính sách cho máy hiện tại.
  • Người dùng - chính sách cho người dùng đã đăng nhập.
  • AppDomain - chính sách cho miền ứng dụng thực thi.

3 thiết bị đầu tiên được định cấu hình trong màn hình cấu hình trong công cụ Cấu hình .NET và cấu hình cuối cùng được định cấu hình khi chạy.

Lý do tại sao tôi giải thích điều này trước tiên là vì RegistryPermissionAttribute chỉ kiểm tra quyền .NET của bạn, nó không kiểm tra các điều khoản Hệ điều hành quyền.

Bạn có thể sử dụng System.Security.AccessControl để kiểm tra quyền của hệ điều hành, nhưng để nhận các quyền bạn có thể cần nâng cao hoặc mạo danh.

7

Tôi không cho rằng nó đơn giản như bạn đã mở khóa mà không chỉ định rằng bạn muốn truy cập ghi? Phương thức OpenSubKey(string) chỉ cho phép truy cập chỉ đọc.

+0

Không. – UnkwnTech

-1

Điều này phù hợp với tôi. Với chìa khóa đã có và không có nó. Không có bất kỳ thuộc tính lắp ráp đặc biệt nào.

using System; 
using Microsoft.Win32; 

namespace WriteToRegistry { 
    class Program { 
    static void Main(string[] args) { 
     const string csRootKey = @"Software\MyCompany\Test"; 

     using (RegistryKey loRegistryKey = Registry.CurrentUser.CreateSubKey(csRootKey)) { 
     if (loRegistryKey == null) 
      throw new InvalidOperationException("Could not create sub key " + csRootKey); 

     loRegistryKey.SetValue("CurrentTime", DateTime.Now.ToString(), RegistryValueKind.String); 
     } 
    } 
    } 
} 

EDIT: Sau khi đọc lại câu hỏi, có vẻ như sự cố có thể là quyền của hệ điều hành.

0

Đảm bảo ứng dụng chạy bằng tài khoản người dùng có đủ quyền truy cập vào sổ đăng ký.

0

Tôi không thấy câu trả lời hoặc giải pháp tại đây. Tôi đã tìm thấy câu hỏi này khi tìm kiếm một thứ khác.

Một điều tôi nghĩ rằng có thể cần thiết là bạn cần phải chạy với tư cách quản trị viên nếu bạn đang chạy từ exe. Nếu bạn đang chạy từ VS bạn sẽ cần phải đảm bảo rằng VS đang chạy với tư cách quản trị viên. VS sẽ hiển thị "(Quản trị viên) trong tiêu đề cửa sổ nếu có.

Các vấn đề liên quan