Acesso Negado à Pasta

0

Eu tive esse problema antes, mas sempre posso corrigi-lo indo para a guia de segurança, em propriedades, em seguida, Avançado e, eventualmente, adicionar Admin à lista de permissões de acesso. Mas neste caso, eu realmente tenho um aplicativo de formulários do windows, no qual, eu uso este código:

FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

em c #.

Isso tudo funcionou bem dentro do Visual Studio, mas uma vez que eu criei o projeto, instalei o programa no meu computador e o executei, ele criou essa pasta.

Por alguma razão, não consigo obter permissão do modo usual. Apenas me dá a mensagem de que "Você não tem permissão para visualizar ou editar a configuração de permissão deste objeto". Eu não sei porque. Alguém pode me dizer como obter permissão ou excluir a pasta? E o que deu errado no meu programa e fez com que isso acontecesse?

    
por GREEN FIRETRUCK 07.07.2018 / 07:18

2 respostas

0

Você sempre pode assumir a propriedade, supondo que você tenha o acesso administrativo necessário. Depois de assumir a propriedade, você terá que fechar as janelas de propriedades e, quando voltar, poderá alterar as permissões. Não posso falar sobre as alterações no seu código, mas aposto que você não tem 'propriedade' da pasta.

    
por 07.07.2018 / 22:17
0

Você também precisa chamar SetAccessControl para aplicar o mudanças.

ds = di.GetAccessControl();
ds.AddAccessRule(fsar);
di.SetAccessControl(ds); // nothing happens until you do this

Parece que os exemplos no MSDN são extremamente carentes de detalhes, como discutido aqui . Eu hackeei o código deste artigo para obter o seguinte que se comporta bem:

static bool SetAcl()
{
    FileSystemRights Rights = (FileSystemRights)0;
    Rights = FileSystemRights.FullControl;

    // *** Add Access Rule to the actual directory itself
    FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights,
                                InheritanceFlags.None,
                                PropagationFlags.NoPropagateInherit,
                                AccessControlType.Allow);

    DirectoryInfo Info = new DirectoryInfo(destinationDirectory);
    DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);

    bool Result = false;
    Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);

    if (!Result)
        return false;

    // *** Always allow objects to inherit on a directory
    InheritanceFlags iFlags = InheritanceFlags.ObjectInherit;
    iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

    // *** Add Access rule for the inheritance
    AccessRule = new FileSystemAccessRule("Users", Rights,
                                iFlags,
                                PropagationFlags.InheritOnly,
                                AccessControlType.Allow);
    Result = false;
    Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);

    if (!Result)
        return false;

    Info.SetAccessControl(Security);

    return true;
}
    
por 06.10.2018 / 06:26