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

Fad*_*lMS 5 c# permissions installer custom-action

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

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);
        }
Run Code Online (Sandbox Code Playgroud)

编辑:
对于那些想知道此问题的解决方案的人:不是授予父文件夹访问权限,而是为该文件夹中的各个文件授予每个用户的访问权限.上面代码中的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);
}
Run Code Online (Sandbox Code Playgroud)

Cos*_*rvu 6

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

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