FileIoperMission을 사용하여 적절한 권한으로 파일을 복사 할 수 없습니다

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

  •  03-07-2019
  •  | 
  •  

문제

이 스 니펫은 사용자 디렉토리에 글을 쓰려고하면 잘 작동하지만 프로그램 파일에 쓰려고하자마자 조용히 실행되고 파일이 복사되지 않았습니다 (예외는 없습니다). 파일을 C : 또는 C : Windows에서 복사하려고하면 무단 ADACCESSException을 잡습니다.

해당 디렉토리에 글을 쓰거나 다른 방식으로 작동하도록 권한을 얻는 또 다른 방법을 알고 있습니까?

도움이 크게 감사드립니다! 감사

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;
}
도움이 되었습니까?

해결책

Vista에서 실행중인 경우 시스템이 프로그램 파일 폴더에 쓸 수있는 시스템이 기존 프로그램이 수행되어 프로그램 디렉토리의 구성을 유지하는 경우 사용자가 관리자가 아닌 경우 계속 작동합니다 (또는 UAC가 활성화되어 있음).

필요한 액세스 레벨을 지정하는 프로그램에 매니페스트를 추가하면 시스템이 Vista-Aware라고 가정하고 모든 호환성 패치를 끄는 것으로 가정합니다.

내 블로그에서 매니페스트 파일의 예를 볼 수 있습니다.

http://www.nbdtech.com/blog/archive/2008/06/16/the-application-manifest-needed-for-xp-and-vista-file.aspx

(게시물의 초점은 공통 컨트롤의 올바른 버전을 얻는 데 있어서도 Vista 보안 선언도 있습니다)

다른 팁

프로그램 파일 폴더에 쓰지 마십시오.

이는 큰 일이 아니며, 특히 Code가 Vista에서 실행되는 날이나 사용자가 관리 권한보다 표준 보안 만받는 회사의 기계에서 발생하는 날에 문제를 일으킬 것입니다. 대신 응용 프로그램 데이터 폴더를 사용하십시오.

Vista에서 달리고 있습니까? 그렇다면 파일 시스템 가상화로 실행 중일 수 있습니다. 이것은 32 비트 버전의 Vista 기능으로 일반 사용자가 파일 시스템의 보호 된 부분에 쓸 수 있습니다. Vista의 LUA 특징의 고통을 줄이기 위해 소개 된 심입니다.

짧은 버전은 운영 체제가 특정 보호 루트 (예 : 프로그램 파일)에 대한 가상 파일 시스템을 생성한다는 것입니다. 비 admin이 쓰기를 시도하면 사본이 원본 대신 편집 된 것으로 만들어집니다. 사용자 계정이 파일을 보려고 시도하면 편집이 표시됩니다. 다른 사용자 계정에는 원본 만 볼 수 있습니다.

더 긴 버전 : http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

코드 액세스 보안 보조금 또는 귀하에 대한 권한을 거부합니다 암호. 현재 사용자에게 부여/거부 된 권한을 무시하는 데 사용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top