2012-02-02 39 views
55

Công cụ tôi phát triển cần cấp quyền truy cập "Kiểm soát hoàn toàn" cho một tệp được tạo bởi nó. Nó cần phải được đọc, sửa đổi và xóa khỏi tất cả các tài khoản windows và thậm chí cả các tài khoản trong tương lai. Điều này có thể đạt được không?Làm cách nào để cấp quyền đầy đủ cho một tệp do ứng dụng của tôi tạo cho TẤT CẢ người dùng?

Tôi biết tôi có thể thử điều này cho một SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); 
FileSecurity fSecurity = File.GetAccessControl(filePath); 
fSecurity.SetAccessRule(rule); 
File.SetAccessControl(filePath, fSecurity); 

Nhưng làm thế nào để cấp nó cho tất cả người sử dụng? Và thậm chí cả các tài khoản trong tương lai có thể? Nếu phần sau là không thể, làm thế nào để đi về yêu cầu đầu tiên?

Cảm ơn.

EDIT:

Đây là mã làm việc cho tôi. Lấy từ liên kết của người trả lời.

private bool GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, 
                InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
                PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
    return true; 
} 

Ghi chú số PropagationFlags.NoPropagateInherit cần thiết (được đề cập đến cuối cùng trong liên kết). Nó cấp đặc quyền cho các tài khoản ngay cả trong tương lai.

+16

Lưu ý với mọi người, không sử dụng "mọi người", thay vào đó sử dụng 'Trình bảo mật định danh mới (WellKnownSidType.WorldSid, null) 'trả về đối tượng SecurityIdentifier. Mọi người chỉ làm việc trên các cửa sổ tiếng Anh cài đặt, sử dụng phương pháp khác đảm bảo nó tương thích với nhiều phiên bản ngôn ngữ. –

+0

@trukin bạn có thể làm cho câu trả lời không? thanks – nawfal

+0

@nawfal: Tôi gặp vấn đề tương tự và tôi cần cấp quyền truy cập thư mục cài đặt của mình sau khi cài đặt ứng dụng, nhưng tôi có thể viết mã này ở đâu? –

Trả lời

96

Lưu ý cho những người đang sử dụng tính năng này.

Khi sử dụng chuỗi ký tự cho FileSystemAccessRule, nó phải là WellKnownSidType.WorldSid thay vì "everyone".

Lý do là vì có nhiều ngôn ngữ cửa sổ và mọi người chỉ áp dụng cho các ngôn ngữ EN, vì vậy đối với tiếng Tây Ban Nha, nó có thể là "Todos" (hoặc cái gì khác).

using System.Security.AccessControl; 
using System.Security.Principal; 
using System.IO; 

private void GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
} 
+0

Tôi nghĩ đây là cách tốt nhất để cho phép kiểm soát hoàn toàn ... – IremadzeArchil19910311

+0

Cảm ơn bạn rất nhiều .. đang đấu tranh với việc giải nén tệp và đặt quyền cho tệp .mdf (vì tôi gặp lỗi chỉ đọc). Cảm ơn! – CularBytes

+0

Tôi có thể hỏi mục đích của giá trị trả lại không? – hypehuman

12

Bạn sẽ cần toàn quyền kiểm soát nhóm "Mọi người" trên máy. Tìm thấy this đăng trên MSDN mà nói về nó.

Hy vọng điều này phù hợp với bạn.

+0

Cảm ơn, Ill thấy điều đó. Điều này có cấp quyền truy cập vào các tài khoản ngay cả trong tương lai không? – nawfal

+0

Cảm ơn nó đã làm việc và cấp quyền truy cập vào tài khoản người dùng trong tương lai. Vui lòng chấp nhận chỉnh sửa của tôi để những người khác biết chính xác nên làm gì. – nawfal

+0

Vui vì nó đã làm việc cho bạn. –

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