功能 | 描述 |
---|---|
類名 | CommonApplicationData |
構造函數參數 | companyFolder(公司名稱)、applicationFolder(應用名稱)、allUsers(布爾值,默認為 false,設置為 true 時允許所有用戶寫入) |
所需命名空間 | System、System.IO、System.Security.AccessControl、System.Security.Principal |
權限設置方法 | 使用 FileSystemAccessRule 授予 BuiltinUsersSid 完全控制權 |
測試操作系統 | Windows 7(預計適用於 Vista 和 XP,但未完全測試) |
異常處理注意事項 | 使用者需在調用時包裝 try/catch 塊,類本身無內部異常處理 |
using System; using System.IO; using System.Security.AccessControl; using System.Security.Principal; public class CommonApplicationData { private string _companyFolder; private string _applicationFolder; private bool _allUsers; public CommonApplicationData(string companyFolder, string applicationFolder, bool allUsers = false) { _companyFolder = companyFolder; _applicationFolder = applicationFolder; _allUsers = allUsers; string commonAppDataPath = Environment.GetFolderPath( Environment.SpecialFolder.CommonApplicationData); string companyPath = Path.Combine(commonAppDataPath, _companyFolder); CreateFolderWithPermissions(companyPath, _allUsers); string applicationPath = Path.Combine(companyPath, _applicationFolder); CreateFolderWithPermissions(applicationPath, _allUsers); } private void CreateFolderWithPermissions(string folderPath, bool allUsers) { if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); if (allUsers) { SetPermissions(folderPath); } } } private void SetPermissions(string folderPath) { DirectoryInfo dirInfo = new DirectoryInfo(folderPath); DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); SecurityIdentifier usersSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null); FileSystemAccessRule rule = new FileSystemAccessRule( usersSid, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow); dirSecurity.AddAccessRule(rule); dirInfo.SetAccessControl(dirSecurity); } }
new CommonApplicationData("MyCompany", "MyApp", true); // 設置所有用戶寫入權限