Pergunta

Eu estive testando meu aplicativo para ver como ele funciona bem quando executado por um usuário não administrativo, e eu ter encontrado problemas com a manipulação de arquivos. Estou recebendo um UnauthorizedAccessException ao tentar substituir um arquivo, se o arquivo foi criado por e usuário Administrativo.

Ao escrever o arquivo I primeiro criar o arquivo como um arquivo .tmp, em seguida, usar File.Copy para substituir o original. O ficheiro.tmp fica criado, mas File.Copy falhar. Meus arquivos são gravados em um diretório público ( "C: \ Documents and Settings \ All Users \ Dados de Aplicativos" no XP).

O que posso fazer para que todos os usuários podem ter o controle total dos arquivos do aplicativo?

Eu encontrei o seguinte:

        System.Security.AccessControl.DirectorySecurity sec =  
                                System.IO.Directory.GetAccessControl ( directory );  
        FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,  
             FileSystemRights.FullControl, AccessControlType.Allow );  
        sec.AddAccessRule ( accRule );  

Will fazer o acima para o diretório que todos os arquivos estão localizados em resolver este problema? Ou será que eu tenho que fazer alguma coisa para cada arquivo? Se assim o que é que alguma coisa?

Editar:

usuários

não-administrador não pode modificar arquivos criados por um usuário administrador. Isto não é bom. Eu preciso para todos os arquivos para ser editável por todos os usuários. Será que não há algum tipo de permissões que podem ser definidas quando o arquivo é criado originalmente que irá conceder isso?

Foi útil?

Solução

Acabei de verificar as permissões sobre os All Users \ Application Data. "Usuários" e "Power Users" ACLs não tem os "Eliminar subpastas e arquivos" permissão.

Eles podem excluir seus próprios arquivos porque o "PROPRIETÁRIO CRIADOR" ACL tem controle total.

Quanto à forma de contornar esta situação, você poderia dar a todos todo o acesso, mas uma idéia melhor seria conceder os "Usuários" e "Power Users" ACLs os "Eliminar subpastas e arquivos" permissão em diretório AppData do seu aplicativo.

Como alternativa, você pode atribuir os "Excluir" e permissões "Modificar" no próprio arquivo para "Usuários" e "usuários avançados", quando ele é criado.

Outras dicas

Este código daria os direitos de acesso completo de utilizador para a pasta, no entanto, isso pode falhar em segurança novamente.

A melhor maneira de certificar-se de sua aplicação sempre pode armazenar informações é através do IsolatedStorage. No entanto, se você precisa de acesso a seus arquivos fora de seu aplicativo, em seguida, esta não é a melhor solução.

Que tal se você usar código semelhante para dar a todos o acesso completo para o arquivo depois que ele foi criado? Se eu entendi corretamente os arquivos sempre será criado com a sua aplicação, certo? Em seguida, o usuário que cria o arquivo em primeiro lugar também terá direitos para ajustar as configurações de segurança para o arquivo. Então é só uma questão de definir direitos públicos para o arquivo, uma vez que é criado e todos os usuários são capazes de substituir o arquivo mais tarde.

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