Windows 7에서“프로그램 파일”파일을 편집 할 수없는 이유는 무엇입니까? 소유자는 Dan입니다. C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules>dir /Q FindJ*

Windows 7에서이 파일을 편집하는 데 문제가 있습니다.

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules\FindJNI.cmake

Cygwin (vi) 또는 TextPad에서 편집하면 해당 두 프로그램이 변경 사항을 확인하여 디스크 어딘가에 기록됩니다 . 그러나 DOS cmd 셸에서 파일을 “입력”하면 파일이 전혀 변경되지 않은 것처럼 보입니다.

내가 알았던 한 가지는 cmd 쉘에서 소유자는 관리자이지만 Cygwin의 bash 쉘에서 소유자는 Dan입니다.

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules>dir /Q FindJ*
 Volume in drive C is Windows7_OS
 Volume Serial Number is 92CA-8707

 Directory of C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

12/30/2011  09:45 AM             1,480 BUILTIN\Administrators FindJasper.cmake
12/30/2011  09:45 AM             7,951 BUILTIN\Administrators FindJava.cmake
12/30/2011  09:45 AM            10,632 BUILTIN\Administrators FindJNI.cmake
12/30/2011  09:45 AM             1,669 BUILTIN\Administrators FindJPEG.cmake
               4 File(s)         21,732 bytes
               0 Dir(s)  132,524,654,592 bytes free


Dan@home /c/Program Files (x86)/CMake 2.8.7/share/cmake-2.8/Modules
$ ls -al FindJ*
-rwx------+ 1 Dan            None 10636 Jan 30 13:57 FindJNI.cmake
-rwx------+ 1 Administrators None  1669 Dec 30 09:45 FindJPEG.cmake
-rwx------+ 1 Administrators None  1480 Dec 30 09:45 FindJasper.cmake
-rwx------+ 1 Administrators None  7951 Dec 30 09:45 FindJava.cmake

어떻게 이럴 수있어? 같은 디렉토리에 같은 이름을 가진 두 개의 다른 파일이있는 것과 같습니다.



답변

Windows Vista ( UAC )에 도입 된 보안 기능으로 인해 “프로그램 파일”과 같은 보호 된 위치에 쓰려고하는 비 관리자 프로그램은 쓰기를 포착하여 대체 “사용자 친화적”위치로 리디렉션합니다.

파일을 만든 프로그램은 파일을 볼 수 있지만 대부분의 다른 프로그램은 파일을 볼 수 없습니다.

Wikipedia 상태 (및 관련 섹션을 강조 표시했습니다) :

사용자가 관리자 권한으로 실행된다는 가정하에 작성된 응용 프로그램은 제한된 사용자 계정으로 실행할 때 이전 버전의 Windows에서 문제를 겪었습니다. 종종 컴퓨터 전체 또는 시스템 디렉토리 (예 : 프로그램 파일) 또는 레지스트리 키에 쓰려고 시도했기 때문에 (특히 HKLM). UAC는 파일 및 레지스트리 가상화를 사용하여이를 완화하려고 시도합니다.이 가상화는 쓰기 (및 후속 읽기)를 사용자 프로필 내의 사용자 별 위치로 리디렉션합니다 . 예를 들어 응용 프로그램이 “C : \ program files \ appname \ settings.ini”에 쓰려고 시도하고 사용자에게 해당 디렉토리에 대한 쓰기 권한이 없으면 쓰기가 “C : \ Users \ username으로 리디렉션됩니다. \ AppData \ Local \ VirtualStore \ Program Files \ appname \ settings.ini”를 참조하십시오.

그래서 이론적으로 변경된 파일은 실제로에 기록되는C:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

이 제한을 해결하는 유일한 방법 은 보안상의 이유로 권장되지 않는 UAC 를 완전히 비활성화 하는 것입니다.

가장 좋은 해결책은 실제로 경로에 cmake가 있고 사용자 프로필 내부와 같은 보호되지 않은 위치를 사용하는 것입니다.


답변

Program Files 폴더는 관리자 권한으로 보호됩니다. Windows XP 및 이전 버전에서는 대부분의 사람들이 항상 관리자로 실행되었습니다. 많은 프로그램이이 경우라고 가정하고 Program Files 폴더에서 모든 작업을 수행했습니다.

Windows Vista가 릴리스되면이 방법을 중단하여 응용 프로그램이 대신 사용하도록합니다.

C : \ Users \ % Username % \ AppData

이로 인해 많은 오래된 응용 프로그램이 중단되었습니다. 이전 응용 프로그램에서 관리자 전용 폴더를 계속 사용할 수 있도록 Windows에서는 변경된 파일을 보관할 가상 저장소를 만들었습니다.

C : \ Users \ % Username % \ AppData \ Local \ VirtualStore

거기에서 파일을 찾을 수 있습니다. 폴더를 열고 창 상단의 호환성 파일 버튼을 눌러 탐색기를 사용할 수도 있습니다 .


답변

XP에서 Windows 7로 이동 한 직후에 비슷한 문제가 발생하여 파일의 압축을 풀려고 시도했지만 C:\Program Files액세스 거부 오류가 계속 발생했습니다.

레슬링을 많이 한 후에 Administrators 그룹의 모든 권한을 허용하기 위해 권한을 변경하기 전에 전체 폴더의 소유권을 가져야한다는 것을 알았습니다.

폴더의 소유권을 얻으려면 폴더를 마우스 오른쪽 버튼으로 클릭하고으로 이동 Properties한 다음 Security탭을 클릭하고을 클릭 Advanced한 다음 Owner탭을 클릭하고Edit . “하위 컨테이너 및 개체의 소유자 바꾸기”를 체크 한 다음 새 소유자 (예 : “관리자”그룹)를 선택한 다음이라고 말합니다 OK.


답변