文件夹权限:授予所有用户完全控制权限

我正在开发一个应用程序,它将一些文件存储在CommonApplicationData文件夹中。 我的应用程序必须修改这些文件。 我设法创建一个自定义操作,以授予CommonApplicationData文件夹中我的应用程序文件夹的完全控制权限。 但这并没有解决非管理员用户的问题。 当我以用户身份登录并尝试修改其中一个文件时,我收到“拒绝访问”消息。
我怎么解决这个问题? 谢谢。
这是我在自定义操作中使用的代码:

 public void GetUsers() { SelectQuery sQuery = new SelectQuery("Win32_UserAccount", "Domain='" + System.Environment.UserDomainName.ToString() + "'"); try { ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQuery); foreach (ManagementObject mObject in mSearcher.Get()) { Permission(mObject["Name"].ToString()); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void Permission(string user) { string directory = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string CompanyFolderPath = Path.Combine(directory, "naseelco\\lms2004"); DirectoryInfo myDirectoryInfo = new DirectoryInfo(CompanyFolderPath); DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl(); string User = System.Environment.UserDomainName + "\\" + user; myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, AccessControlType.Allow)); myDirectoryInfo.SetAccessControl(myDirectorySecurity); } 

编辑:
对于那些想要了解此问题的解决方案的人:不是将访问权限授予父文件夹,而是为该文件夹中的各个文件授予每个用户的访问权限。 上面代码中的Permission方法已修改如下:

 private void Permission(string user) { string directory = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string filePath = Path.Combine(directory, "naseelco\\lms2004\\fms.txt"); FileSecurity fSecurity = File.GetAccessControl(filePath); FileSystemAccessRule rule = new FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow); fSecurity.SetAccessRule(rule); File.SetAccessControl(filePath, fSecurity); } 

一个好的解决方案是使用xcacls.exe或任何其他ACL工具授予Everyone完全控制权。 可以在安装项目中将此工具添加为自定义操作。

建议不要为每个用户授予权限,因为将来不会涵盖将来的帐户。 此外,通过自定义代码执行此操作并不总是有效。 在通过代码控制它们时,Windows权限有点棘手。