문제

프로그램 데이터 디렉토리에서 파일을 만들기 위해 createFile ()을 호출하고 있습니다. 나는 dir 이름을 얻기 위해 shgetSpecialfolderPath ()를 사용하고 있습니다.

Vista가있는 사용자가 CreateFile ()가 오류 5 (액세스 거부)를 반환하는 사람이 있습니다. CreateFile ()가 실제로 파일을 만들려고 시도하는 위치를 알고 있으면 폴더 권한을 확인할 수 있습니다. Vista (UAC)의 문제점은 내가 전달한 디렉토리에서 파일을 만들려고하지 않는다는 것입니다. 또한 VirtualStore 디렉토리에있을 수도 있습니다. 혼란스러운 소스는이 사용자가 독일어이고 ShgetSpecialfolderPath ()가 "C : Program Data Blah Blah"를 경로로 반환하고 있지만 실제로 경로가있는 곳이라고 생각하지 않습니다. 독일 Vista는 "프로그램 데이터"에 독일어 단어를 사용한다고 생각합니다. 사용자에게 "파일을 만들려고하는 정확한 경로입니다.이 폴더에서 권한을 확인하십시오."

열린 파일 핸들에서 A 경로를 얻을 수 있다는 것을 알고 있지만이 경우 CreateFile ()가 실패하여 열린 핸들이 없습니다. Vista가 파일을 만들려고하는 실제 경로를 알려줄 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

프로세스 모니터를 발사하고 그 일을 시청하십시오.http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

다른 팁

UAC를 사용하면 사용 된 경로가 원하는 경로가 아니라면 리디렉션이 적용됩니다. 리디렉션이 발생하지 않도록 추가하십시오. 명백한 Vista에 응용 프로그램이 올바르게 코딩되고 액세스 제한을 인식하고 있음을 나타내는 응용 프로그램에 (즉, 앱이 실행할 관리 권한이 필요하지 않은 경우 예를 들어, HKLM 또는 프로그램 폴더에 쓰지 않습니다).

그러나 응용 프로그램은 AppData 폴더에 쓸 수 있어야합니다 (실제로 사용하는 경우).

CSIDL_COMMON_APPDATA가 아닌 CSIDL_APPDATA를 사용하고 있는지 확인하십시오 (후자는 관리자 권한으로 만 액세스 할 수 있음).

실제 경로를 찾으려면 (기대할 수있는 경로) 사용자에게 %appData %를 탐색기 막대에 입력하도록 지시하십시오 (또는 Windows+R을 누른 다음 %AppData %를 입력하고 입력하십시오). 이 폴더에서 탐색기가 열립니다.

내 이해는 Vista가 C : Program 파일 내부에 쓰려고 시도한 파일을 작성하는 데 ProgramData를 사용하지만 앱을 관리자로 실행하지 않는 한 프로그램 파일 내부를 작성할 수 없기 때문에 실패했습니다. 아마도 현재 사용자의 AppData 폴더에 파일을 저장해야 할 수도 있습니다.

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