2008-10-14 2 views
3

우리 제품을 업데이트하는 Windows 서비스가 있습니다. 제품 파일을 임시 디렉토리 (일반적으로 "C : \ Windows \ Temp")에 복사하고 바이너리를 패치 한 다음 MoveFileEx를 사용하여 파일을 다시 부팅 할 때 설치 디렉토리 (일반적으로 "C : \ Program Files \ Product ". 설치 디렉토리의 파일은 상위 폴더에서 보안 속성을 상속합니다. 복사, 패치 및 재부팅 후에 설치 디렉토리의 파일에 일부 ACL이 누락되었습니다. 특히 파일에는 사용자 그룹에 대한 ACL이 더 이상 없으므로 사용자는 재부팅 후에 더 이상 프로그램을 실행할 수 없습니다.파일 보안 속성이 파일 복사에 엉망이되고있다

아무도 설명 할 수 있습니까? 설치 디렉토리에서 임시 디렉토리로 복사하는 것처럼 파일은 임시 디렉토리의 ACL을 상속합니다. 그러나 MoveFileEx/Reboot에서 파일은 설치 및 임시 디렉토리에 공통으로있는 ACL 만 상속합니다.

답변

4

Windows에서 파일을 복사하면 파일은 대상 디렉토리의 ACL을 사용합니다. 파일을 이동하면 ACL은 해당 디렉토리에서 상속 할 수있는 파일을 무시합니다. MoveFileEx가 파일에서 어떻게 다르게 작동하는지 모르겠습니다.

temp 디렉토리는 대개 사용자 프로필 아래에 위치하므로 (% TMP % 및 % TEMP %는 일반적으로 여기를 가리 킵니다) 여기에 파일을 복사하면 해당 사용자에 대한 권한이 부여됩니다. 이러한 파일을 프로그램 파일 디렉토리로 이동하면 해당 사용자와 함께 해당 사용자 권한 만 사용되므로 설치 사용자 만 실행할 수 있습니다.

+0

나는 이것이 아마도 문제를 못살게 굴 것이라고 생각한다. 한 가지 수정 사항이 있지만 ususal 권한으로 실행되는 서비스의 % TEMP % 디렉터리는 특정 사용자의 임시 디렉터리가 아니라 C : \ Windows \ Temp입니다. – Charles

0

잠재적 인 해결 방법 중 하나는 파일의 사본을 같은 디렉토리에 있지만 다른 이름으로 패치하는 것입니다. 다시 부팅 한 후 패치 된 버전을 스왑 할 수 있습니다. 또는 먼저 재부팅 한 다음 해당 위치에서 패치를 수행하고 수동 롤백이 필요한 경우 임시 디렉터리로 백업하십시오.

실제로 다른 위치로 이동하려는 경우 패치 할 파일과 동일한 위치에 임시 폴더를 만들면 해당 디렉터리가 상속 된 사용 권한을 사용한다고 가정하고 사용 권한을 동일하게 유지하는 데 도움이됩니다.