Настройка разрешений для папок в Vista - PullRequest
2 голосов
/ 28 октября 2008

Я пытаюсь установить права доступа к папке и всем ее дочерним элементам на компьютере Vista. Код, который у меня есть, таков:

 public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl, 
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None, 
                             AccessControlType.Allow));

            info.SetAccessControl(ds);            
        }

Однако это не работает так, как я ожидал.
Даже если я запускаю код от имени администратора, он не будет устанавливать разрешения.

Папка, с которой я работаю, находится в C: \ ProgramData \ <моя папка>, и я могу просто вручную изменить ее права.

Любой хочет указать мне правильное направление.

Ответы [ 2 ]

6 голосов
/ 28 октября 2008

Так что ответ в два раза. Сначала создавалась подпапка до того, как были установлены разрешения для папки, и мне нужно было или еще один флаг на разрешениях, чтобы сделать так, чтобы и папки, и файлы наследовали разрешения.

public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl,
                             InheritanceFlags.ObjectInherit |
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None,
                             AccessControlType.Allow));
            info.SetAccessControl(ds);            
        }

После этого кажется, что все работает.

1 голос
/ 28 октября 2008

Это может быть глупый вопрос, но пытались ли вы выполнить то же действие вручную (например, с помощью Проводника)? В Vista есть несколько каталогов, которые даже пользователи в группе «Администраторы» не могут изменить, не предпринимая дополнительных действий. Я думаю, что для начала нужно сделать два шага.

Сначала используйте Explorer, чтобы внести те же изменения, которые вы пытаетесь внести в свой код. Если это не помогло, устраните неисправность.

Во-вторых, проверьте свой код в каталоге, который вы создали в своей собственной папке пользователя. Вам не нужно иметь права администратора, чтобы сделать это; вошедшая в систему учетная запись должна иметь возможность изменять ACL для папок, например, под. C: \ Users \ вашеимя \ документы

.

Я бы также прошел по коду в отладчике и посмотрел на объект "ds" непосредственно перед вашим вызовом SetAccessControl. Это может показать вам нечто неожиданное, чтобы направить вас по правильному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...