Não é possível copiar arquivos com permissões apropriadas usando FileIOPermission

StackOverflow https://stackoverflow.com/questions/159598

  •  03-07-2019
  •  | 
  •  

Pergunta

Este trecho funciona bem se eu tento escrever em um diretório do usuário, mas assim que eu tento escrever em Arquivos de Programas, ele apenas executa silenciosamente eo arquivo não foi copiado (sem exceção). Se eu tentar copiar o arquivo em C: \ ou C:. \ Windows eu pegar um UnauthorizedAccessException

Você sabe outra maneira de obter as permissões para gravar nesse diretório ou para fazê-lo funcionar de outra maneira?

Qualquer ajuda muito apreciada! Graças

using(FileStream fs=File.Open(source, FileMode.Open)){ }  
try  
{  
    FileIOPermission fp = new FileIOPermission(FileIOPermissionAccess.Write,   
                          AccessControlActions.Change, "C:\\Program Files\\MyPath");  
    fp.Demand();  //<-- no exception but file is not copied
    File.Copy("C:\\Users\\teebot\\Documents\\File.xml","C:\\Program Files\\MyPath\\File.xml",true);  
}  
catch(SecurityExceptions)  
{  
    throw(s);  
} 
catch(UnauthorizedAccessException unauthroizedException)
{
    throw unauthroizedException;
}
Foi útil?

Solução

Se você estiver executando sob Vista, em seguida, o sistema apenas redireciona gravações para o programa de pasta de arquivos, isso é feito para que o programa antigo que manter a sua configuração no diretório do programa continuará a trabalhar quando o usuário não é um administrador (ou UAC é ativado).

Tudo que você tem a fazer é adicionar um manifesto para seu programa que especificar o nível de acesso necessário, em seguida, o sistema assume o seu programa é Vista-aware e desliga todos os patches de compatibilidade.

Você pode ver um exemplo de um arquivo de manifesto no meu blog em:

http://www.nbdtech.com/blog/archive/2008/06/16/The-Application-Manifest-Needed-for-XP-and-Vista-Style-File.aspx

(o foco do post é sobre como obter a versão correta dos controles comuns, mas as declarações de segurança do Vista também estão lá)

Outras dicas

Não escreva na pasta Program Files.

Isso é um grande não-não, e vai especialmente causa problemas quando chega o dia em que seus código é executado em Vista ou em uma máquina em uma empresa onde os usuários só obter segurança padrão em vez de direitos de administrador. Use a pasta Application Data em vez.

Você está em execução no Vista? Se assim for, então você pode estar executando em virtualização de sistema de arquivos. Esta é uma característica em 32 versões do Vista bit que permite que um usuário normal para escrever a partes protegidas do sistema de arquivos. É um calço introduzido para reduzir a dor da LUA recursos do Vista.

A versão curta é que o sistema operacional irá criar um sistema de arquivos virtual para certas raízes protegidos (tais como arquivos de programa). Quando um não-administrador tenta escrever para ele, uma cópia será criada uma editted em vez do original. Quando suas tentativas de conta de usuário de olhar para o arquivo, ele vai ver o edit.s Outras contas de usuário só verá o original.

versão mais longa: http: // thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

subsídios Code Access Security ou nega permissões para o código . Ele não pode ser usado para permissões de substituição que são concedidos / negadas para o usuário atual.

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