c# - 文件夹权限 : Full control granted to all users

标签 c# permissions installation custom-action

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

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 将完全控制权授予 Everyone或任何其他 ACL 工具。此工具可以作为自定义操作添加到您的设置项目中。

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

关于c# - 文件夹权限 : Full control granted to all users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881390/

相关文章:

c# - 实体类的跨 DDL 扩展

c# - <identity impersonate ="true"/>的正确使用

linux - 在 Linux 上安装 ghc 二进制文件(找不到 libgmp.so)

c# - 防止在没有 page.redirect 的情况下重新发送表单

c# - 将 DropDownListFor 与原始类型列表一起使用的正确方法?

PHP BitWise 权限和角色,或替代方案

linux - 如何检查shell脚本是否有足够的权限运行

installation - 如何安装 Dart 包的更新版本?

windows - Octave 3.8.2 如何安装Image pkg?

c# - 使用 Visual Studio 2013 远程调试在 Linux 上运行的 C# mono 应用程序的最佳方法