2010-10-13 31 views
6

Tôi đã tạo chương trình trong Visual Studio. Chương trình tạo ra một logfile và ghi vào nó trong khi chương trình đang chạy. Vì vậy tôi đã xây dựng một trình cài đặt (setup-project), nên thiết lập quyền ghi cho thư mục chương trình của tôi bất kể người dùng nào làm việc với chương trình. hiện nó trông như thế này:Đặt quyền ghi cho tất cả người dùng cho thư mục chương trình của tôi

// ... 
} 
    InitializeComponent(); 

    string folder = Directory.GetCurrentDirectory(); 

    DirectorySecurity ds = Directory.GetAccessControl(folder); 
    ds.AddAccessRule(new FileSystemAccessRule("Everyone", //Everyone is important 
                //because rights for all users! 
    FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow)); 
} 
// ... 

Trong hai hàng cuối cùng tôi nhận được một System.SystemException: “Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Domäne konnte nicht hergestellt werden.”

[Dịch: "Các mối quan hệ tin tưởng giữa các tên miền chính và miền tin cậy không thể thiết lập "]

các stacktrace đọc như thế này:.

bei System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts, Boolean& someFailed) 
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean& someFailed) 
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess) 
bei System.Security.Principal.NTAccount.Translate(Type targetType) 
bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified) 
bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule) 
bei System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule) 

Bạn có biết tôi có thể làm gì không? cảm ơn

+4

Bạn đã thực thi trình cài đặt của mình với tư cách quản trị viên chưa? – Dennis

+3

Lưu ý rằng có một lý do cho các thư mục công cộng khác nhau trên một hệ thống nhất định để lưu trữ dữ liệu chương trình ... – NotMe

+0

Ồ, tôi nghĩ rằng thực thi trình cài đặt có quyền quản trị là cài đặt mặc định. Tôi có thể tìm kiếm điều này ở đâu? Trong các thuộc tính của dự án thiết lập của tôi, tôi không thể tìm thấy điều này. – Rotaney

Trả lời

3

Có lẽ câu trả lời hay nhất không phải là những gì bạn đã yêu cầu. Có một lý do chính đáng để không ghi vào thư mục tệp chương trình. Dữ liệu nhật ký nói riêng là tạm thời và không nên được viết ở đây.

Một ý tưởng hay hơn là ghi dữ liệu nhật ký vào thư mục được chỉ định bởi biến môi trường TEMP. Nếu bạn làm điều này, bạn sẽ tiết kiệm cho người dùng của bạn một vài rắc rối và ngăn họ nguyền rủa phần mềm của bạn trong tương lai. Xin hãy kiểm tra câu trả lời này trong đó bao gồm các chủ đề tương tự:

Allow access permission to write in Program Files of Windows 7

0

previously asked question này nên chỉ cho bạn đi đúng hướng. Về cơ bản, bạn làm NOT muốn bất kỳ người dùng nào viết vào thư mục Program Files. UAC, an ninh và các biện pháp khác là có để thử và ngăn chặn điều này càng nhiều càng tốt.

Về cơ bản, nếu bạn muốn một tệp sẽ được ghi bởi tất cả người dùng, bạn sẽ muốn nó trong thư mục ProgramData, có thể truy cập qua %ALLUSERSPROFILE%, chứ không phải thư mục tạm thời của người dùng cá nhân. để làm với một tệp nhật ký. Hãy nhớ rằng nội dung của thư mục tạm thời nên được coi là dễ bay hơi và có thể bị xóa bất kỳ lúc nào, chẳng hạn như Trình hướng dẫn Dọn Đĩa.

3

Bạn không thiếu tuyên bố nơi bạn thực sự đặt điều khiển truy cập trở lại thư mục?

Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds); 
Các vấn đề liên quan