Pergunta

Eu estou tentando configurar as permissões de uma pasta e tudo isso de crianças em um computador Vista. O código que eu tenho até agora é isso.

 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);            
        }

No entanto, não está funcionando como eu esperaria que ele.
Mesmo se eu executar o código como administrador ele não irá definir as permissões.

A pasta Eu estou trabalhando com está localizado em C: \ ProgramData. \ e eu posso mudar manualmente os direitos sobre ele muito bem

Qualquer um quer me apontar na direção certa.

Foi útil?

Solução

Portanto, a resposta é duas vezes. Primeiro uma pasta sub estava sendo criado antes as permissões foram definidas na pasta e eu precisava ou em mais uma bandeira sobre as permissões para fazê-lo assim ambas as pastas e arquivos herdou as permissões.

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);            
        }

Depois que tudo parece estar funcionando.

Outras dicas

Esta pode ser uma pergunta idiota, mas você já tentou realizar a mesma ação manualmente (por exemplo, usando Explorer)? Vista tem alguns diretórios que nem mesmo os usuários do grupo Administradores podem modificar sem tomar medidas adicionais. Eu acho que existem dois passos que você precisa tomar em primeiro lugar.

Em primeiro lugar, o uso Explorer para fazer a mesma modificação que você está tentando fazer em seu código. Se ele falhar, resolva isso.

Em segundo lugar, testar seu código em um diretório que você criou em sua própria pasta de usuário. Você não deve precisar privs de administrador para fazer isso; a logado conta deve ser capaz de mudar ACL em pastas sob p.ex. c:. \ Users \ \ yourname documentos

Eu também passo através do código no depurador e olhar para o objeto "ds" pouco antes de sua chamada para SetAccessControl. Isso pode mostrar-lhe algo inesperado para ajustá-lo no caminho certo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top