【问题标题】:folder permissions: Full control granted to all users文件夹权限:授予所有用户完全控制权
【发布时间】:2011-12-14 10:44:57
【问题描述】:

我正在开发一个将一些文件存储在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);
        }

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

【问题讨论】:

  • 选择一个已经允许非管理员用户进行读/写访问的文件夹不是更容易吗?
  • @David Heffernan:像什么?我在 CommonApplicationData 中使用了一个子文件夹。
  • @FadelMS:我之前也遇到过同样的问题。 +1 User App Data 文件夹是 non-admin 用户有权访问的文件夹,但这些位置不重叠,因此您无法存储全局数据。我希望您在找到解决方案时发布解决方案。您可能必须使用注册表或 Program Files 位置。
  • @jp2code:好奇,不重叠的位置是什么意思?
  • CommonApplicationData 是所有用户的同一个文件夹;但是,所有用户(正如 FadelMS 发现的那样)都没有访问权限。

标签: c# permissions installation custom-action


【解决方案1】:

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

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

【讨论】:

  • Users组,或者Authenticated Users;后者不包括客人。
猜你喜欢
  • 2019-06-18
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多